<!doctype html>
<html lang="zh-CN">
<head>

    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    
    <meta name="referrer" content="no-referrer-when-downgrade">
    

    <title>Java高防OCR和机器人图形验证码 | Anttu&#39;s Blog</title>
    <meta property="og:title" content="Java高防OCR和机器人图形验证码 - Anttu&#39;s Blog">
    <meta property="og:type" content="article">
        
    <meta property="article:published_time" content='2017-03-09T21:46:20&#43;08:00'>
        
        
    <meta property="article:modified_time" content='2017-03-09T21:46:20&#43;08:00'>
        
    <meta name="Keywords" content="golang,go语言,go语言笔记,anttu,java,博客,bash,linux笔记,python笔记,公众号,小程序">
    <meta name="description" content="Java原生图形验证码">
        
    <meta name="author" content="Anttu">
    <meta property="og:url" content="https://anttu.gitee.io/post/2017-03-09-java_captach/">
    <link rel="shortcut icon" href='/favicon.ico'  type="image/x-icon">

    <link rel="stylesheet" href='/css/normalize.css'>
    <link rel="stylesheet" href='/css/style.css'>
    <script type="text/javascript" src="//cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

    
    
    
    
    
    
        <link rel="stylesheet" href='/css/asciinema-player.css'>
    
</head>


<body>
    <header id="header" class="clearfix">
    <div class="container">
        <div class="col-group">
            <div class="site-name ">
                
                    <a id="logo" href="https://anttu.gitee.io/">
                        Anttu&#39;s Blog
                    </a>
                
                <p class="description">一位Java开发者，喜欢研究技术，同时也在学习Golang和Python中，对服务器、Linux使用比较熟悉。欢迎添加技术交流QQ群：655158296</p>
            </div>
            <div>
                <nav id="nav-menu" class="clearfix">
                    <a class="current" href="https://anttu.gitee.io/">首页</a>
                    
                    <a  href="https://anttu.gitee.io/archives/" title="归档">归档</a>
                    
                    <a  href="https://anttu.gitee.io/tags/" title="分类">分类</a>
                    
                    <a  href="https://anttu.gitee.io/about/" title="关于">关于</a>
                    
                </nav>
            </div>
        </div>
    </div>
</header>

    <div id="body">
        <div class="container">
            <div class="col-group">

                <div class="col-8" id="main">
                    
<div class="res-cons">
    <style type="text/css">
    .post-toc {
        position: fixed;
        width: 200px;
        margin-left: -210px;
        padding: 5px 10px;
        font-family: Athelas, STHeiti, Microsoft Yahei, serif;
        font-size: 12px;
        border: 1px solid rgba(0, 0, 0, .07);
        border-radius: 5px;
        background-color: rgba(255, 255, 255, 0.98);
        background-clip: padding-box;
        -webkit-box-shadow: 1px 1px 2px rgba(0, 0, 0, .125);
        box-shadow: 1px 1px 2px rgba(0, 0, 0, .125);
        word-wrap: break-word;
        white-space: nowrap;
        -webkit-box-sizing: border-box;
        box-sizing: border-box;
        z-index: 999;
        cursor: pointer;
        max-height: 70%;
        overflow-y: auto;
        overflow-x: hidden;
    }

    .post-toc .post-toc-title {
        width: 100%;
        margin: 0 auto;
        font-size: 20px;
        font-weight: 400;
        text-transform: uppercase;
        text-align: center;
    }

    .post-toc .post-toc-content {
        font-size: 15px;
    }

    .post-toc .post-toc-content>nav>ul {
        margin: 10px 0;
    }

    .post-toc .post-toc-content ul {
        padding-left: 20px;
        list-style: square;
        margin: 0.5em;
        line-height: 1.8em;
    }

    .post-toc .post-toc-content ul ul {
        padding-left: 15px;
        display: none;
    }

    @media print,
    screen and (max-width:1057px) {
        .post-toc {
            display: none;
        }
    }
</style>
<div class="post-toc" style="position: absolute; top: 188px;">
    <h2 class="post-toc-title">文章目录</h2>
    <div class="post-toc-content">
        <nav id="TableOfContents">
  <ul>
    <li><a href="#前言">前言</a></li>
    <li><a href="#1效果图如下">1、效果图如下：</a>
      <ul>
        <li><a href="#11-静态jpg">1.1 静态jpg</a></li>
        <li><a href="#12-动态gif">1.2 动态gif</a></li>
      </ul>
    </li>
    <li><a href="#2代码如下">2、代码如下：</a>
      <ul>
        <li><a href="#21-图形验证码工具类">2.1 图形验证码工具类</a></li>
        <li><a href="#22-调用示例">2.2 调用示例</a></li>
        <li><a href="#23-用到的老外的工具类共计4个如果只是生成的话用不了这么多">2.3 用到的老外的工具类：共计4个，如果只是生成的话用不了这么多</a></li>
        <li><a href="#232-gifdecoder">2.3.2 GifDecoder</a></li>
        <li><a href="#233-gifencoder">2.3.3 GifEncoder</a></li>
        <li><a href="#234-quant">2.3.4 Quant</a></li>
      </ul>
    </li>
  </ul>
</nav>
    </div>
</div>
<script type="text/javascript">
    $(document).ready(function () {
        var postToc = $(".post-toc");
        if (postToc.length) {
            var leftPos = $("#main").offset().left;
            if (leftPos < 220) {
                postToc.css({ "width": leftPos - 10, "margin-left": (0 - leftPos) })
            }

            var t = postToc.offset().top - 20,
                a = {
                    start: {
                        position: "absolute",
                        top: t
                    },
                    process: {
                        position: "fixed",
                        top: 20
                    },
                };
            $(window).scroll(function () {
                var e = $(window).scrollTop();
                e < t ? postToc.css(a.start) : postToc.css(a.process)
            })
        }

        if ($("#TableOfContents").children().length < 1) {
            $(".post-toc").remove();
        }
    })
</script>
    <article class="post">
        <header>
            <h1 class="post-title">Java高防OCR和机器人图形验证码</h1>
        </header>
        <date class="post-meta meta-date">
            2017年3月9日
        </date>
        
        <div class="post-meta">
            <span>|</span>
            
            <span class="meta-category">
                <a href='/categories/java' target="_blank">java</a>
            </span>
            
            <span class="meta-category">
                <a href='/categories/captcha' target="_blank">captcha</a>
            </span>
            
        </div>
        
        
        <div class="post-meta">
            <span id="busuanzi_container_page_pv">|<span id="busuanzi_value_page_pv"></span><span>
                    阅读</span></span>
        </div>
        
        
        <div class="clear" style="display: none">
            <div class="toc-article">
                <div class="toc-title">文章目录</div>
            </div>
        </div>
        
        <div class="post-content">
            <h2 id="前言">前言</h2>
<p>结合网上的图形验证码技术，不依赖第三方包纯java加工了一个比较复杂的图形验证码方案，防OCR、防机器人。 <br>
网上的图形验证码方案都是零星的，弄了一个随机字体、随机彩色字符、随机字体大小、随机扭曲、随机旋转等技术，能有效的防OCR、描边、深浅色等技术识别。 <br>
本意是想区分登录、领券、抽奖等一些场景操作的，后来一想，随机拼人品吧，于是就有了下面的工具类。</p>
<h2 id="1效果图如下">1、效果图如下：</h2>
<h3 id="11-静态jpg">1.1 静态jpg</h3>
<p>
        <img class="mx-auto" alt="" src="/posts/imgCode/AYhf.jpg" />   
     
        <img class="mx-auto" alt="" src="/posts/imgCode/ni8P.jpg" />   
     
        <img class="mx-auto" alt="" src="/posts/imgCode/2GmY.jpg" />   
    </p>
<h3 id="12-动态gif">1.2 动态gif</h3>
<p>
        <img class="mx-auto" alt="" src="/posts/imgCode/grNc.gif" />   
     
        <img class="mx-auto" alt="" src="/posts/imgCode/arLP.gif" />   
     
        <img class="mx-auto" alt="" src="/posts/imgCode/bdPp.gif" />   
    </p>
<h2 id="2代码如下">2、代码如下：</h2>
<p>如下共计有6个类，图形验证码工具类，使用方法调用，老外的Encoder、GifDecoder、GifEncoder、Quant等4个工具类<br>
因下面的代码太长，具体的可以参考我的<a href="https://github.com/anTtutu/anttu.code.github.io.git">github</a></p>
<h3 id="21-图形验证码工具类">2.1 图形验证码工具类</h3>
<div class="highlight"><div style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  1
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  2
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  3
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  4
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  5
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  6
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  7
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  8
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  9
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 10
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 11
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 12
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 13
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 14
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 15
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 16
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 17
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 18
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 19
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 20
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 21
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 22
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 23
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 24
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 25
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 26
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 27
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 28
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 29
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 30
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 31
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 32
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 33
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 34
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 35
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 36
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 37
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 38
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 39
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 40
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 41
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 42
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 43
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 44
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 45
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 46
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 47
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 48
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 49
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 50
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 51
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 52
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 53
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 54
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 55
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 56
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 57
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 58
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 59
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 60
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 61
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 62
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 63
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 64
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 65
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 66
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 67
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 68
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 69
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 70
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 71
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 72
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 73
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 74
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 75
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 76
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 77
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 78
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 79
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 80
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 81
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 82
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 83
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 84
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 85
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 86
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 87
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 88
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 89
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 90
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 91
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 92
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 93
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 94
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 95
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 96
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 97
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 98
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 99
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">100
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">101
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">102
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">103
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">104
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">105
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">106
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">107
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">108
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">109
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">110
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">111
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">112
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">113
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">114
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">115
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">116
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">117
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">118
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">119
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">120
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">121
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">122
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">123
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">124
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">125
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">126
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">127
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">128
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">129
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">130
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">131
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">132
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">133
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">134
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">135
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">136
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">137
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">138
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">139
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">140
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">141
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">142
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">143
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">144
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">145
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">146
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">147
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">148
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">149
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">150
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">151
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">152
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">153
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">154
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">155
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">156
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">157
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">158
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">159
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">160
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">161
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">162
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">163
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">164
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">165
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">166
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">167
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">168
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">169
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">170
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">171
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">172
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">173
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">174
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">175
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">176
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">177
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">178
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">179
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">180
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">181
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">182
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">183
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">184
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">185
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">186
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">187
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">188
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">189
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">190
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">191
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">192
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">193
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">194
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">195
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">196
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">197
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">198
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">199
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">200
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">201
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">202
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">203
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">204
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">205
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">206
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">207
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">208
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">209
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">210
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">211
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">212
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">213
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">214
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">215
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">216
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">217
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">218
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">219
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">220
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">221
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">222
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">223
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">224
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">225
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">226
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">227
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">228
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">229
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">230
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">231
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">232
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">233
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">234
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">235
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">236
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">237
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">238
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">239
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">240
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">241
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">242
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">243
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">244
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">245
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">246
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">247
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">248
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">249
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">250
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">251
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">252
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">253
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">254
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">255
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">256
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">257
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">258
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">259
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">260
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">261
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">262
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">263
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">264
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">265
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">266
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">267
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">268
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">269
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">270
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">271
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">272
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">273
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">274
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">275
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">276
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">277
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">278
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">279
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">280
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">281
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">282
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">283
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">284
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">285
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">286
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">287
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">288
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">289
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">290
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">291
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">292
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">293
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">294
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">295
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">296
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">297
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">298
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">299
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">300
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">301
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">302
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">303
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">304
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">305
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">306
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">307
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">308
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">309
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">310
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">311
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">312
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">313
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">314
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">315
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">316
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">317
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">318
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">319
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">320
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">321
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">322
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">323
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">324
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">325
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">326
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">327
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">328
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">329
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">330
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">331
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">332
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">333
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">334
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">335
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">336
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">337
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">338
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">339
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">340
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">341
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">342
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">343
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">344
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">345
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">346
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">347
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">348
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">349
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">350
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">351
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">352
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">353
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">354
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">355
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">356
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">357
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">358
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">359
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">360
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">361
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">362
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">363
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">364
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">365
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">366
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">367
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">368
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">369
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">370
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">371
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">372
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">373
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">374
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">375
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">376
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">377
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">378
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">379
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">380
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">381
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">382
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">383
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">384
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">385
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">386
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">387
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">388
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">389
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">390
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">391
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">392
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">393
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">394
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">395
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">396
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">397
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">398
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">399
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">400
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">401
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">402
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">403
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">404
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">405
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">406
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">407
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">408
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">409
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">410
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">411
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">412
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">413
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">414
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">415
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">416
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">417
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">418
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">419
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">420
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">421
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">422
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">423
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">424
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">425
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">426
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">427
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">428
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">429
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">430
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">431
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">432
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">433
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">434
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">435
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">436
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">437
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">438
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">439
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">440
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">441
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">442
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">443
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">444
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">445
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">446
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">447
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">448
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">449
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">450
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">451
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">452
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">453
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">454
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">455
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">456
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">457
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">458
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">459
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">460
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">461
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">462
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">463
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">464
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">465
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">466
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">467
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">468
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">469
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">470
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">471
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">472
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">473
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">474
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">475
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">476
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">477
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">478
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">479
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">480
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">481
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">482
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">483
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">484
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">485
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">486
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">487
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">488
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">489
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">490
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">491
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">492
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">493
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">494
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">495
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">496
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">497
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">498
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">499
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">500
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">501
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">502
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">503
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">504
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">505
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">506
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">507
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">508
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">509
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">510
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">511
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">512
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">513
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">514
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">515
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">516
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">517
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">518
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">519
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">520
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">521
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">522
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">523
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">524
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">525
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">526
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">527
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">528
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">529
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">530
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">531
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">532
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">533
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">534
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">535
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">536
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">537
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">538
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">539
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">540
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">541
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">542
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">543
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">544
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">545
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">546
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">547
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">548
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">549
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">550
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">551
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">552
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">553
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">554
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">555
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">556
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">557
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">558
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">559
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">560
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">561
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">562
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">563
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">564
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">565
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">566
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">567
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">568
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">569
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">570
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">571
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">572
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">573
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">574
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">575
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">576
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">577
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">578
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">579
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">580
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">581
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">582
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">583
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">584
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">585
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">586
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">587
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">588
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">589
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">590
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">591
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">592
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#000;font-weight:bold">package</span> <span style="color:#555">com.test.test</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.awt.AlphaComposite</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.awt.Color</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.awt.Font</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.awt.Graphics</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.awt.Graphics2D</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.awt.RenderingHints</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.awt.geom.AffineTransform</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.awt.image.BufferedImage</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.io.ByteArrayInputStream</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.io.File</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.io.FileOutputStream</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.io.IOException</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.io.OutputStream</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.util.Arrays</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.util.Random</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">javax.imageio.ImageIO</span><span style="color:#000;font-weight:bold">;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">org.apache.log4j.Logger</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> * 验证码工具类：  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> * 随机字体、字体样式、字体大小（验证码图片宽度 - 8 ~ 验证码图片宽度 + 10）  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> * 彩色字符 每个字符的颜色随机，一定会不相同  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> * 随机字符 阿拉伯数字 + 小写字母 + 大写字母  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> * 3D中空自定义字体，需要单独使用，只有阿拉伯数字和大写字母  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> * gif支持动态输出
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> * 2017-06-09 解决压测时自定义字符字体不停的new，内存溢出问题。因为自定义字体不会变，提成static,建议用64bit jdk，自定义自动字符串太长，32bit偶尔编译会报错字符串太长
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> * @author Anttu  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> * @date 2017年5月9日 下午7:27:55  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> */</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">public</span> <span style="color:#000;font-weight:bold">class</span> <span style="color:#458;font-weight:bold">RandonImgCodeUtil</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span>
</span></span><span style="display:flex;"><span>	  <span style="color:#000;font-weight:bold">private</span> <span style="color:#000;font-weight:bold">static</span> Logger logger <span style="color:#000;font-weight:bold">=</span> Logger<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">getLogger</span><span style="color:#000;font-weight:bold">(</span>RandomVerifyImgCodeUtil<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">class</span><span style="color:#000;font-weight:bold">);</span>
</span></span><span style="display:flex;"><span>	  
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * 随机类  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">private</span> <span style="color:#000;font-weight:bold">static</span> Random random <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> Random<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">// 放到session中的key    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> String RANDOMCODEKEY <span style="color:#000;font-weight:bold">=</span> <span style="color:#d14">&#34;RANDOMVALIDATECODEKEY&#34;</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">// 验证码来源范围，去掉了0,1,I,O,l,o几个容易混淆的字符    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> String VERIFY_CODES <span style="color:#000;font-weight:bold">=</span> <span style="color:#d14">&#34;23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz&#34;</span><span style="color:#000;font-weight:bold">;</span>
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">private</span> <span style="color:#000;font-weight:bold">static</span> ImgFontByte imgFontByte <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> ImgFontByte<span style="color:#000;font-weight:bold">();</span>
</span></span><span style="display:flex;"><span>	
</span></span><span style="display:flex;"><span>	<span style="color:#000;font-weight:bold">private</span> <span style="color:#000;font-weight:bold">static</span> Font baseFont<span style="color:#000;font-weight:bold">;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">static</span>
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">try</span>
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>
</span></span><span style="display:flex;"><span>            baseFont <span style="color:#000;font-weight:bold">=</span> Font<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">createFont</span><span style="color:#000;font-weight:bold">(</span>Font<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">TRUETYPE_FONT</span><span style="color:#000;font-weight:bold">,</span>
</span></span><span style="display:flex;"><span>                    RandomVerifyImgCodeUtils<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">class</span><span style="color:#000;font-weight:bold">.</span><span style="color:#008080">getClassLoader</span><span style="color:#000;font-weight:bold">().</span><span style="color:#008080">getResourceAsStream</span><span style="color:#000;font-weight:bold">(</span><span style="color:#d14">&#34;fonts/ActionJackson.TTF&#34;</span><span style="color:#000;font-weight:bold">));</span>
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">catch</span> <span style="color:#000;font-weight:bold">(</span>FontFormatException e<span style="color:#000;font-weight:bold">)</span>
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>
</span></span><span style="display:flex;"><span>            logger<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">error</span><span style="color:#000;font-weight:bold">(</span><span style="color:#d14">&#34;new img font font format failed. e: &#34;</span> <span style="color:#000;font-weight:bold">+</span> e<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">getMessage</span><span style="color:#000;font-weight:bold">(),</span> e<span style="color:#000;font-weight:bold">);</span>
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">catch</span> <span style="color:#000;font-weight:bold">(</span>IOException e<span style="color:#000;font-weight:bold">)</span>
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>
</span></span><span style="display:flex;"><span>            logger<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">error</span><span style="color:#000;font-weight:bold">(</span><span style="color:#d14">&#34;new img font io failed. e: &#34;</span> <span style="color:#000;font-weight:bold">+</span> e<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">getMessage</span><span style="color:#000;font-weight:bold">(),</span> e<span style="color:#000;font-weight:bold">);</span>
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">// 字体类型    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">private</span> <span style="color:#000;font-weight:bold">static</span> String<span style="color:#000;font-weight:bold">[]</span> fontName <span style="color:#000;font-weight:bold">=</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#d14">&#34;Algerian&#34;</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#d14">&#34;Arial&#34;</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#d14">&#34;Arial Black&#34;</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#d14">&#34;Agency FB&#34;</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#d14">&#34;Calibri&#34;</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#d14">&#34;Cambria&#34;</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#d14">&#34;Gadugi&#34;</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#d14">&#34;Georgia&#34;</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#d14">&#34;Consolas&#34;</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#d14">&#34;Comic Sans MS&#34;</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#d14">&#34;Courier New&#34;</span><span style="color:#000;font-weight:bold">,</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#d14">&#34;Gill sans&#34;</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#d14">&#34;Time News Roman&#34;</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#d14">&#34;Tahoma&#34;</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#d14">&#34;Quantzite&#34;</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#d14">&#34;Verdana&#34;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">};</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">// 字体样式    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">private</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[]</span> fontStyle <span style="color:#000;font-weight:bold">=</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            Font<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">BOLD</span><span style="color:#000;font-weight:bold">,</span> Font<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">ITALIC</span><span style="color:#000;font-weight:bold">,</span> Font<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">ROMAN_BASELINE</span><span style="color:#000;font-weight:bold">,</span> Font<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">PLAIN</span><span style="color:#000;font-weight:bold">,</span> Font<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">BOLD</span> <span style="color:#000;font-weight:bold">+</span> Font<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">ITALIC</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">};</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">// 颜色    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">private</span> <span style="color:#000;font-weight:bold">static</span> Color<span style="color:#000;font-weight:bold">[]</span> colorRange <span style="color:#000;font-weight:bold">=</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            Color<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">WHITE</span><span style="color:#000;font-weight:bold">,</span> Color<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">CYAN</span><span style="color:#000;font-weight:bold">,</span> Color<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">GRAY</span><span style="color:#000;font-weight:bold">,</span> Color<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">LIGHT_GRAY</span><span style="color:#000;font-weight:bold">,</span> Color<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">MAGENTA</span><span style="color:#000;font-weight:bold">,</span> Color<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">ORANGE</span><span style="color:#000;font-weight:bold">,</span> Color<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">PINK</span><span style="color:#000;font-weight:bold">,</span> Color<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">YELLOW</span><span style="color:#000;font-weight:bold">,</span> Color<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">GREEN</span><span style="color:#000;font-weight:bold">,</span> Color<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">BLUE</span><span style="color:#000;font-weight:bold">,</span>    
</span></span><span style="display:flex;"><span>            Color<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">DARK_GRAY</span><span style="color:#000;font-weight:bold">,</span> Color<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">BLACK</span><span style="color:#000;font-weight:bold">,</span> Color<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">RED</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">};</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * 使用系统默认字符源生成验证码  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *   
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param verifySize 验证码长度  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @return  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#000;font-weight:bold">static</span> String <span style="color:#900;font-weight:bold">generateVerifyCode</span><span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> verifySize<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> generateVerifyCode<span style="color:#000;font-weight:bold">(</span>verifySize<span style="color:#000;font-weight:bold">,</span> VERIFY_CODES<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * 使用指定源生成验证码  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *   
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param verifySize 验证码长度  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param sources 验证码字符源  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @return  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">private</span> <span style="color:#000;font-weight:bold">static</span> String <span style="color:#900;font-weight:bold">generateVerifyCode</span><span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> verifySize<span style="color:#000;font-weight:bold">,</span> String sources<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>sources <span style="color:#000;font-weight:bold">==</span> <span style="color:#000;font-weight:bold">null</span> <span style="color:#000;font-weight:bold">||</span> sources<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">length</span><span style="color:#000;font-weight:bold">()</span> <span style="color:#000;font-weight:bold">==</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            sources <span style="color:#000;font-weight:bold">=</span> VERIFY_CODES<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> codesLen <span style="color:#000;font-weight:bold">=</span> sources<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">length</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        Random rand <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> Random<span style="color:#000;font-weight:bold">(</span>System<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">currentTimeMillis</span><span style="color:#000;font-weight:bold">());</span>    
</span></span><span style="display:flex;"><span>        StringBuilder verifyCode <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> StringBuilder<span style="color:#000;font-weight:bold">(</span>verifySize<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> i <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> i <span style="color:#000;font-weight:bold">&lt;</span> verifySize<span style="color:#000;font-weight:bold">;</span> i<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            verifyCode<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">append</span><span style="color:#000;font-weight:bold">(</span>sources<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">charAt</span><span style="color:#000;font-weight:bold">(</span>rand<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>codesLen <span style="color:#000;font-weight:bold">-</span> 1<span style="color:#000;font-weight:bold">)));</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> verifyCode<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">toString</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * 输出指定验证码图片流  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *   
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param w 验证码图片的宽  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param h 验证码图片的高  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param os 流  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param code 验证码  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param type 场景类型，login：登录，  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *            coupons：领券 登录清晰化，领券模糊化  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *            3D: 3D中空自定义字体  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *            GIF：普通动态GIF  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *            GIF3D：3D动态GIF  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *            mix2: 普通字体和3D字体混合  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *            mixGIF: 混合动态GIF  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @throws IOException  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">outputImage</span><span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> w<span style="color:#000;font-weight:bold">,</span> <span style="color:#458;font-weight:bold">int</span> h<span style="color:#000;font-weight:bold">,</span> OutputStream os<span style="color:#000;font-weight:bold">,</span> String code<span style="color:#000;font-weight:bold">,</span> String type<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">throws</span> IOException    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> verifySize <span style="color:#000;font-weight:bold">=</span> code<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">length</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        BufferedImage image <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> BufferedImage<span style="color:#000;font-weight:bold">(</span>w<span style="color:#000;font-weight:bold">,</span> h<span style="color:#000;font-weight:bold">,</span> BufferedImage<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">TYPE_INT_RGB</span><span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        Random rand <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> Random<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        Graphics2D g2 <span style="color:#000;font-weight:bold">=</span> image<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">createGraphics</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        g2<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">setRenderingHint</span><span style="color:#000;font-weight:bold">(</span>RenderingHints<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">KEY_ANTIALIASING</span><span style="color:#000;font-weight:bold">,</span> RenderingHints<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">VALUE_ANTIALIAS_ON</span><span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        Color<span style="color:#000;font-weight:bold">[]</span> colors <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> Color<span style="color:#000;font-weight:bold">[</span>5<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>        Color<span style="color:#000;font-weight:bold">[]</span> colorSpaces <span style="color:#000;font-weight:bold">=</span> colorRange<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">float</span><span style="color:#000;font-weight:bold">[]</span> fractions <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> <span style="color:#458;font-weight:bold">float</span><span style="color:#000;font-weight:bold">[</span>colors<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">length</span><span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> i <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> i <span style="color:#000;font-weight:bold">&lt;</span> colors<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">length</span><span style="color:#000;font-weight:bold">;</span> i<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            colors<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> colorSpaces<span style="color:#000;font-weight:bold">[</span>rand<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>colorSpaces<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">length</span><span style="color:#000;font-weight:bold">)];</span>    
</span></span><span style="display:flex;"><span>            fractions<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> rand<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextFloat</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        Arrays<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">sort</span><span style="color:#000;font-weight:bold">(</span>fractions<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        g2<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">setColor</span><span style="color:#000;font-weight:bold">(</span>Color<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">GRAY</span><span style="color:#000;font-weight:bold">);</span><span style="color:#998;font-style:italic">// 设置边框色    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        g2<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">fillRect</span><span style="color:#000;font-weight:bold">(</span>0<span style="color:#000;font-weight:bold">,</span> 0<span style="color:#000;font-weight:bold">,</span> w<span style="color:#000;font-weight:bold">,</span> h<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        Color c <span style="color:#000;font-weight:bold">=</span> getRandColor<span style="color:#000;font-weight:bold">(</span>200<span style="color:#000;font-weight:bold">,</span> 250<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        g2<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">setColor</span><span style="color:#000;font-weight:bold">(</span>c<span style="color:#000;font-weight:bold">);</span><span style="color:#998;font-style:italic">// 设置背景色    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        g2<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">fillRect</span><span style="color:#000;font-weight:bold">(</span>0<span style="color:#000;font-weight:bold">,</span> 2<span style="color:#000;font-weight:bold">,</span> w<span style="color:#000;font-weight:bold">,</span> h <span style="color:#000;font-weight:bold">-</span> 4<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">char</span><span style="color:#000;font-weight:bold">[]</span> charts <span style="color:#000;font-weight:bold">=</span> code<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">toCharArray</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> i <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> i <span style="color:#000;font-weight:bold">&lt;</span> charts<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">length</span><span style="color:#000;font-weight:bold">;</span> i<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            g2<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">setColor</span><span style="color:#000;font-weight:bold">(</span>c<span style="color:#000;font-weight:bold">);</span><span style="color:#998;font-style:italic">// 设置背景色    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>            g2<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">setFont</span><span style="color:#000;font-weight:bold">(</span>getRandomFont<span style="color:#000;font-weight:bold">(</span>h<span style="color:#000;font-weight:bold">,</span> type<span style="color:#000;font-weight:bold">));</span>    
</span></span><span style="display:flex;"><span>            g2<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">fillRect</span><span style="color:#000;font-weight:bold">(</span>0<span style="color:#000;font-weight:bold">,</span> 2<span style="color:#000;font-weight:bold">,</span> w<span style="color:#000;font-weight:bold">,</span> h <span style="color:#000;font-weight:bold">-</span> 4<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// 1.绘制干扰线    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        Random random <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> Random<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        g2<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">setColor</span><span style="color:#000;font-weight:bold">(</span>getRandColor<span style="color:#000;font-weight:bold">(</span>160<span style="color:#000;font-weight:bold">,</span> 200<span style="color:#000;font-weight:bold">));</span><span style="color:#998;font-style:italic">// 设置线条的颜色    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#458;font-weight:bold">int</span> lineNumbers <span style="color:#000;font-weight:bold">=</span> 20<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>type<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">equals</span><span style="color:#000;font-weight:bold">(</span><span style="color:#d14">&#34;login&#34;</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">||</span> type<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">contains</span><span style="color:#000;font-weight:bold">(</span><span style="color:#d14">&#34;mix&#34;</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">||</span> type<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">contains</span><span style="color:#000;font-weight:bold">(</span><span style="color:#d14">&#34;3D&#34;</span><span style="color:#000;font-weight:bold">))</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            lineNumbers <span style="color:#000;font-weight:bold">=</span> 20<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">else</span> <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>type<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">equals</span><span style="color:#000;font-weight:bold">(</span><span style="color:#d14">&#34;coupons&#34;</span><span style="color:#000;font-weight:bold">))</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            lineNumbers <span style="color:#000;font-weight:bold">=</span> getRandomDrawLine<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">else</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            lineNumbers <span style="color:#000;font-weight:bold">=</span> getRandomDrawLine<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> i <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> i <span style="color:#000;font-weight:bold">&lt;</span> lineNumbers<span style="color:#000;font-weight:bold">;</span> i<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#458;font-weight:bold">int</span> x <span style="color:#000;font-weight:bold">=</span> random<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>w <span style="color:#000;font-weight:bold">-</span> 1<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#458;font-weight:bold">int</span> y <span style="color:#000;font-weight:bold">=</span> random<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>h <span style="color:#000;font-weight:bold">-</span> 1<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#458;font-weight:bold">int</span> xl <span style="color:#000;font-weight:bold">=</span> random<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>6<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">+</span> 1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#458;font-weight:bold">int</span> yl <span style="color:#000;font-weight:bold">=</span> random<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>12<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">+</span> 1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            g2<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">drawLine</span><span style="color:#000;font-weight:bold">(</span>x<span style="color:#000;font-weight:bold">,</span> y<span style="color:#000;font-weight:bold">,</span> x <span style="color:#000;font-weight:bold">+</span> xl <span style="color:#000;font-weight:bold">+</span> 40<span style="color:#000;font-weight:bold">,</span> y <span style="color:#000;font-weight:bold">+</span> yl <span style="color:#000;font-weight:bold">+</span> 20<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// 2.添加噪点    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#458;font-weight:bold">float</span> yawpRate <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">05f</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>type<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">equals</span><span style="color:#000;font-weight:bold">(</span><span style="color:#d14">&#34;login&#34;</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">||</span> type<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">contains</span><span style="color:#000;font-weight:bold">(</span><span style="color:#d14">&#34;mix&#34;</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">||</span> type<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">contains</span><span style="color:#000;font-weight:bold">(</span><span style="color:#d14">&#34;3D&#34;</span><span style="color:#000;font-weight:bold">))</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            yawpRate <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">05f</span><span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// 噪声率    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">else</span> <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>type<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">equals</span><span style="color:#000;font-weight:bold">(</span><span style="color:#d14">&#34;coupons&#34;</span><span style="color:#000;font-weight:bold">))</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            yawpRate <span style="color:#000;font-weight:bold">=</span> getRandomDrawPoint<span style="color:#000;font-weight:bold">();</span> <span style="color:#998;font-style:italic">// 噪声率    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">else</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            yawpRate <span style="color:#000;font-weight:bold">=</span> getRandomDrawPoint<span style="color:#000;font-weight:bold">();</span> <span style="color:#998;font-style:italic">// 噪声率    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> area <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">(</span>yawpRate <span style="color:#000;font-weight:bold">*</span> w <span style="color:#000;font-weight:bold">*</span> h<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> i <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> i <span style="color:#000;font-weight:bold">&lt;</span> area<span style="color:#000;font-weight:bold">;</span> i<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#458;font-weight:bold">int</span> x <span style="color:#000;font-weight:bold">=</span> random<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>w<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#458;font-weight:bold">int</span> y <span style="color:#000;font-weight:bold">=</span> random<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>h<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#458;font-weight:bold">int</span> rgb <span style="color:#000;font-weight:bold">=</span> getRandomIntColor<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>            image<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">setRGB</span><span style="color:#000;font-weight:bold">(</span>x<span style="color:#000;font-weight:bold">,</span> y<span style="color:#000;font-weight:bold">,</span> rgb<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// 3.使图片扭曲    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        shear<span style="color:#000;font-weight:bold">(</span>g2<span style="color:#000;font-weight:bold">,</span> w<span style="color:#000;font-weight:bold">,</span> h<span style="color:#000;font-weight:bold">,</span> c<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">char</span><span style="color:#000;font-weight:bold">[]</span> chars <span style="color:#000;font-weight:bold">=</span> code<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">toCharArray</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        Double rd <span style="color:#000;font-weight:bold">=</span> rand<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextDouble</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        Boolean rb <span style="color:#000;font-weight:bold">=</span> rand<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextBoolean</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>type<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">equals</span><span style="color:#000;font-weight:bold">(</span><span style="color:#d14">&#34;login&#34;</span><span style="color:#000;font-weight:bold">))</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> i <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> i <span style="color:#000;font-weight:bold">&lt;</span> verifySize<span style="color:#000;font-weight:bold">;</span> i<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                g2<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">setColor</span><span style="color:#000;font-weight:bold">(</span>getRandColor<span style="color:#000;font-weight:bold">(</span>100<span style="color:#000;font-weight:bold">,</span> 160<span style="color:#000;font-weight:bold">));</span>    
</span></span><span style="display:flex;"><span>                g2<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">setFont</span><span style="color:#000;font-weight:bold">(</span>getRandomFont<span style="color:#000;font-weight:bold">(</span>h<span style="color:#000;font-weight:bold">,</span> type<span style="color:#000;font-weight:bold">));</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>                AffineTransform affine <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> AffineTransform<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>                affine<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">setToRotation</span><span style="color:#000;font-weight:bold">(</span>Math<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">PI</span> <span style="color:#000;font-weight:bold">/</span> 4 <span style="color:#000;font-weight:bold">*</span> rd <span style="color:#000;font-weight:bold">*</span> <span style="color:#000;font-weight:bold">(</span>rb <span style="color:#000;font-weight:bold">?</span> 1 <span style="color:#000;font-weight:bold">:</span> <span style="color:#000;font-weight:bold">-</span>1<span style="color:#000;font-weight:bold">),</span> <span style="color:#000;font-weight:bold">(</span>w <span style="color:#000;font-weight:bold">/</span> verifySize<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">*</span> i <span style="color:#000;font-weight:bold">+</span> <span style="color:#000;font-weight:bold">(</span>h <span style="color:#000;font-weight:bold">-</span> 4<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">/</span> 2<span style="color:#000;font-weight:bold">,</span> h <span style="color:#000;font-weight:bold">/</span> 2<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>                g2<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">setTransform</span><span style="color:#000;font-weight:bold">(</span>affine<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>                g2<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">drawOval</span><span style="color:#000;font-weight:bold">(</span>random<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>w<span style="color:#000;font-weight:bold">),</span> random<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>h<span style="color:#000;font-weight:bold">),</span> 5 <span style="color:#000;font-weight:bold">+</span> random<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>10<span style="color:#000;font-weight:bold">),</span> 5 <span style="color:#000;font-weight:bold">+</span> random<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>10<span style="color:#000;font-weight:bold">));</span>    
</span></span><span style="display:flex;"><span>                g2<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">drawChars</span><span style="color:#000;font-weight:bold">(</span>chars<span style="color:#000;font-weight:bold">,</span> i<span style="color:#000;font-weight:bold">,</span> 1<span style="color:#000;font-weight:bold">,</span> <span style="color:#000;font-weight:bold">((</span>w <span style="color:#000;font-weight:bold">-</span> 10<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">/</span> verifySize<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">*</span> i <span style="color:#000;font-weight:bold">+</span> 5<span style="color:#000;font-weight:bold">,</span> h <span style="color:#000;font-weight:bold">/</span> 2 <span style="color:#000;font-weight:bold">+</span> <span style="color:#000;font-weight:bold">(</span>h <span style="color:#000;font-weight:bold">-</span> 4<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">/</span> 2 <span style="color:#000;font-weight:bold">-</span> 10<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>            g2<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">dispose</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>            ImageIO<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">write</span><span style="color:#000;font-weight:bold">(</span>image<span style="color:#000;font-weight:bold">,</span> <span style="color:#d14">&#34;jpg&#34;</span><span style="color:#000;font-weight:bold">,</span> os<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">else</span> <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>type<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">contains</span><span style="color:#000;font-weight:bold">(</span><span style="color:#d14">&#34;GIF&#34;</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">||</span> type<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">contains</span><span style="color:#000;font-weight:bold">(</span><span style="color:#d14">&#34;mixGIF&#34;</span><span style="color:#000;font-weight:bold">))</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            GifEncoder gifEncoder <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> GifEncoder<span style="color:#000;font-weight:bold">();</span> <span style="color:#998;font-style:italic">// gif编码类，这个利用了洋人写的编码类    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>            <span style="color:#998;font-style:italic">// 生成字符    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>            gifEncoder<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">start</span><span style="color:#000;font-weight:bold">(</span>os<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            gifEncoder<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">setQuality</span><span style="color:#000;font-weight:bold">(</span>180<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            gifEncoder<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">setDelay</span><span style="color:#000;font-weight:bold">(</span>150<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            gifEncoder<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">setRepeat</span><span style="color:#000;font-weight:bold">(</span>0<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>            AlphaComposite ac3<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> i <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> i <span style="color:#000;font-weight:bold">&lt;</span> verifySize<span style="color:#000;font-weight:bold">;</span> i<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                g2<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">setColor</span><span style="color:#000;font-weight:bold">(</span>getRandColor<span style="color:#000;font-weight:bold">(</span>100<span style="color:#000;font-weight:bold">,</span> 160<span style="color:#000;font-weight:bold">));</span>    
</span></span><span style="display:flex;"><span>                g2<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">setFont</span><span style="color:#000;font-weight:bold">(</span>getRandomFont<span style="color:#000;font-weight:bold">(</span>h<span style="color:#000;font-weight:bold">,</span> type<span style="color:#000;font-weight:bold">));</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> j <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> j <span style="color:#000;font-weight:bold">&lt;</span> verifySize<span style="color:#000;font-weight:bold">;</span> j<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                    AffineTransform affine <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> AffineTransform<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>                    affine<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">setToRotation</span><span style="color:#000;font-weight:bold">(</span>Math<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">PI</span> <span style="color:#000;font-weight:bold">/</span> 4 <span style="color:#000;font-weight:bold">*</span> rd <span style="color:#000;font-weight:bold">*</span> <span style="color:#000;font-weight:bold">(</span>rb <span style="color:#000;font-weight:bold">?</span> 1 <span style="color:#000;font-weight:bold">:</span> <span style="color:#000;font-weight:bold">-</span>1<span style="color:#000;font-weight:bold">),</span> <span style="color:#000;font-weight:bold">(</span>w <span style="color:#000;font-weight:bold">/</span> verifySize<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">*</span> i <span style="color:#000;font-weight:bold">+</span> <span style="color:#000;font-weight:bold">(</span>h <span style="color:#000;font-weight:bold">-</span> 4<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">/</span> 2<span style="color:#000;font-weight:bold">,</span> h <span style="color:#000;font-weight:bold">/</span> 2<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>                    g2<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">setTransform</span><span style="color:#000;font-weight:bold">(</span>affine<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>                    g2<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">drawChars</span><span style="color:#000;font-weight:bold">(</span>chars<span style="color:#000;font-weight:bold">,</span> i<span style="color:#000;font-weight:bold">,</span> 1<span style="color:#000;font-weight:bold">,</span> <span style="color:#000;font-weight:bold">((</span>w <span style="color:#000;font-weight:bold">-</span> 10<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">/</span> verifySize<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">*</span> i <span style="color:#000;font-weight:bold">+</span> 5<span style="color:#000;font-weight:bold">,</span> h <span style="color:#000;font-weight:bold">/</span> 2 <span style="color:#000;font-weight:bold">+</span> <span style="color:#000;font-weight:bold">(</span>h <span style="color:#000;font-weight:bold">-</span> 4<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">/</span> 2 <span style="color:#000;font-weight:bold">-</span> 10<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>                    ac3 <span style="color:#000;font-weight:bold">=</span> AlphaComposite<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">getInstance</span><span style="color:#000;font-weight:bold">(</span>AlphaComposite<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">SRC_OVER</span><span style="color:#000;font-weight:bold">,</span> getAlpha<span style="color:#000;font-weight:bold">(</span>j<span style="color:#000;font-weight:bold">,</span> i<span style="color:#000;font-weight:bold">,</span> verifySize<span style="color:#000;font-weight:bold">));</span>    
</span></span><span style="display:flex;"><span>                    g2<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">setComposite</span><span style="color:#000;font-weight:bold">(</span>ac3<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>                    g2<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">drawOval</span><span style="color:#000;font-weight:bold">(</span>random<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>w<span style="color:#000;font-weight:bold">),</span> random<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>h<span style="color:#000;font-weight:bold">),</span> 5 <span style="color:#000;font-weight:bold">+</span> random<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>10<span style="color:#000;font-weight:bold">),</span> 5 <span style="color:#000;font-weight:bold">+</span> random<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>10<span style="color:#000;font-weight:bold">));</span>    
</span></span><span style="display:flex;"><span>                    gifEncoder<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">addFrame</span><span style="color:#000;font-weight:bold">(</span>image<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>                    image<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">flush</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            gifEncoder<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">finish</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>            g2<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">dispose</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">else</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> i <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> i <span style="color:#000;font-weight:bold">&lt;</span> verifySize<span style="color:#000;font-weight:bold">;</span> i<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                g2<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">setColor</span><span style="color:#000;font-weight:bold">(</span>getRandColor<span style="color:#000;font-weight:bold">(</span>100<span style="color:#000;font-weight:bold">,</span> 160<span style="color:#000;font-weight:bold">));</span>    
</span></span><span style="display:flex;"><span>                g2<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">setFont</span><span style="color:#000;font-weight:bold">(</span>getRandomFont<span style="color:#000;font-weight:bold">(</span>h<span style="color:#000;font-weight:bold">,</span> type<span style="color:#000;font-weight:bold">));</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>                AffineTransform affine <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> AffineTransform<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>                affine<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">setToRotation</span><span style="color:#000;font-weight:bold">(</span>Math<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">PI</span> <span style="color:#000;font-weight:bold">/</span> 4 <span style="color:#000;font-weight:bold">*</span> rd <span style="color:#000;font-weight:bold">*</span> <span style="color:#000;font-weight:bold">(</span>rb <span style="color:#000;font-weight:bold">?</span> 1 <span style="color:#000;font-weight:bold">:</span> <span style="color:#000;font-weight:bold">-</span>1<span style="color:#000;font-weight:bold">),</span> <span style="color:#000;font-weight:bold">(</span>w <span style="color:#000;font-weight:bold">/</span> verifySize<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">*</span> i <span style="color:#000;font-weight:bold">+</span> <span style="color:#000;font-weight:bold">(</span>h <span style="color:#000;font-weight:bold">-</span> 4<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">/</span> 2<span style="color:#000;font-weight:bold">,</span> h <span style="color:#000;font-weight:bold">/</span> 2<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>                g2<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">setTransform</span><span style="color:#000;font-weight:bold">(</span>affine<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>                g2<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">drawOval</span><span style="color:#000;font-weight:bold">(</span>random<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>w<span style="color:#000;font-weight:bold">),</span> random<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>h<span style="color:#000;font-weight:bold">),</span> 5 <span style="color:#000;font-weight:bold">+</span> random<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>10<span style="color:#000;font-weight:bold">),</span> 5 <span style="color:#000;font-weight:bold">+</span> random<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>10<span style="color:#000;font-weight:bold">));</span>    
</span></span><span style="display:flex;"><span>                g2<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">drawChars</span><span style="color:#000;font-weight:bold">(</span>chars<span style="color:#000;font-weight:bold">,</span> i<span style="color:#000;font-weight:bold">,</span> 1<span style="color:#000;font-weight:bold">,</span> <span style="color:#000;font-weight:bold">((</span>w <span style="color:#000;font-weight:bold">-</span> 10<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">/</span> verifySize<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">*</span> i <span style="color:#000;font-weight:bold">+</span> 5<span style="color:#000;font-weight:bold">,</span> h <span style="color:#000;font-weight:bold">/</span> 2 <span style="color:#000;font-weight:bold">+</span> <span style="color:#000;font-weight:bold">(</span>h <span style="color:#000;font-weight:bold">-</span> 4<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">/</span> 2 <span style="color:#000;font-weight:bold">-</span> 10<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>            g2<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">dispose</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>            ImageIO<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">write</span><span style="color:#000;font-weight:bold">(</span>image<span style="color:#000;font-weight:bold">,</span> <span style="color:#d14">&#34;jpg&#34;</span><span style="color:#000;font-weight:bold">,</span> os<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * 获取随机颜色  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *   
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param fc  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param bc  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @return  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">private</span> <span style="color:#000;font-weight:bold">static</span> Color <span style="color:#900;font-weight:bold">getRandColor</span><span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> fc<span style="color:#000;font-weight:bold">,</span> <span style="color:#458;font-weight:bold">int</span> bc<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>fc <span style="color:#000;font-weight:bold">&gt;</span> 255<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            fc <span style="color:#000;font-weight:bold">=</span> 255<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>bc <span style="color:#000;font-weight:bold">&gt;</span> 255<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            bc <span style="color:#000;font-weight:bold">=</span> 255<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> r <span style="color:#000;font-weight:bold">=</span> fc <span style="color:#000;font-weight:bold">+</span> random<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>bc <span style="color:#000;font-weight:bold">-</span> fc<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> g <span style="color:#000;font-weight:bold">=</span> fc <span style="color:#000;font-weight:bold">+</span> random<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>bc <span style="color:#000;font-weight:bold">-</span> fc<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> b <span style="color:#000;font-weight:bold">=</span> fc <span style="color:#000;font-weight:bold">+</span> random<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>bc <span style="color:#000;font-weight:bold">-</span> fc<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> <span style="color:#000;font-weight:bold">new</span> Color<span style="color:#000;font-weight:bold">(</span>r<span style="color:#000;font-weight:bold">,</span> g<span style="color:#000;font-weight:bold">,</span> b<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">private</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#458;font-weight:bold">int</span> <span style="color:#900;font-weight:bold">getRandomIntColor</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[]</span> rgb <span style="color:#000;font-weight:bold">=</span> getRandomRgb<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> color <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> c <span style="color:#000;font-weight:bold">:</span> rgb<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            color <span style="color:#000;font-weight:bold">=</span> color <span style="color:#000;font-weight:bold">&lt;&lt;</span> 8<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            color <span style="color:#000;font-weight:bold">=</span> color <span style="color:#000;font-weight:bold">|</span> c<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> color<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">private</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[]</span> <span style="color:#900;font-weight:bold">getRandomRgb</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[]</span> rgb <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[</span>3<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> i <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> i <span style="color:#000;font-weight:bold">&lt;</span> 3<span style="color:#000;font-weight:bold">;</span> i<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            rgb<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> random<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>255<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> rgb<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * 随机字体、随机风格、随机大小  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *   
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param h 验证码图片高  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @return  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">private</span> <span style="color:#000;font-weight:bold">static</span> Font <span style="color:#900;font-weight:bold">getRandomFont</span><span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> h<span style="color:#000;font-weight:bold">,</span> String type<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// 字体    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        String name <span style="color:#000;font-weight:bold">=</span> fontName<span style="color:#000;font-weight:bold">[</span>random<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>fontName<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">length</span><span style="color:#000;font-weight:bold">)];</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// 字体样式    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#458;font-weight:bold">int</span> style <span style="color:#000;font-weight:bold">=</span> fontStyle<span style="color:#000;font-weight:bold">[</span>random<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>fontStyle<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">length</span><span style="color:#000;font-weight:bold">)];</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// 字体大小    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#458;font-weight:bold">int</span> size <span style="color:#000;font-weight:bold">=</span> getRandomFontSize<span style="color:#000;font-weight:bold">(</span>h<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>type<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">equals</span><span style="color:#000;font-weight:bold">(</span><span style="color:#d14">&#34;login&#34;</span><span style="color:#000;font-weight:bold">))</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">return</span> <span style="color:#000;font-weight:bold">new</span> Font<span style="color:#000;font-weight:bold">(</span>name<span style="color:#000;font-weight:bold">,</span> style<span style="color:#000;font-weight:bold">,</span> size<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">else</span> <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>type<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">equals</span><span style="color:#000;font-weight:bold">(</span><span style="color:#d14">&#34;coupons&#34;</span><span style="color:#000;font-weight:bold">))</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">return</span> <span style="color:#000;font-weight:bold">new</span> Font<span style="color:#000;font-weight:bold">(</span>name<span style="color:#000;font-weight:bold">,</span> style<span style="color:#000;font-weight:bold">,</span> size<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">else</span> <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>type<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">contains</span><span style="color:#000;font-weight:bold">(</span><span style="color:#d14">&#34;3D&#34;</span><span style="color:#000;font-weight:bold">))</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">return</span> <span style="color:#000;font-weight:bold">new</span> ImgFontByte<span style="color:#000;font-weight:bold">().</span><span style="color:#008080">getFont</span><span style="color:#000;font-weight:bold">(</span>size<span style="color:#000;font-weight:bold">,</span> style<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">else</span> <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>type<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">contains</span><span style="color:#000;font-weight:bold">(</span><span style="color:#d14">&#34;mix&#34;</span><span style="color:#000;font-weight:bold">))</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#458;font-weight:bold">int</span> flag <span style="color:#000;font-weight:bold">=</span> random<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>10<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>flag <span style="color:#000;font-weight:bold">&gt;</span> 4<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">return</span> <span style="color:#000;font-weight:bold">new</span> Font<span style="color:#000;font-weight:bold">(</span>name<span style="color:#000;font-weight:bold">,</span> style<span style="color:#000;font-weight:bold">,</span> size<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">else</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">return</span> <span style="color:#000;font-weight:bold">new</span> ImgFontByte<span style="color:#000;font-weight:bold">().</span><span style="color:#008080">getFont</span><span style="color:#000;font-weight:bold">(</span>size<span style="color:#000;font-weight:bold">,</span> style<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">else</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">return</span> <span style="color:#000;font-weight:bold">new</span> Font<span style="color:#000;font-weight:bold">(</span>name<span style="color:#000;font-weight:bold">,</span> style<span style="color:#000;font-weight:bold">,</span> size<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * 干扰线按范围获取随机数  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *   
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @return  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">private</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#458;font-weight:bold">int</span> <span style="color:#900;font-weight:bold">getRandomDrawLine</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> min <span style="color:#000;font-weight:bold">=</span> 20<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> max <span style="color:#000;font-weight:bold">=</span> 155<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        Random random <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> Random<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> random<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>max<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">%</span> <span style="color:#000;font-weight:bold">(</span>max <span style="color:#000;font-weight:bold">-</span> min <span style="color:#000;font-weight:bold">+</span> 1<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">+</span> min<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * 噪点数率按范围获取随机数  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *   
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @return  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">private</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#458;font-weight:bold">float</span> <span style="color:#900;font-weight:bold">getRandomDrawPoint</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">float</span> min <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">05f</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">float</span> max <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">1f</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> min <span style="color:#000;font-weight:bold">+</span> <span style="color:#000;font-weight:bold">((</span>max <span style="color:#000;font-weight:bold">-</span> min<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">*</span> <span style="color:#000;font-weight:bold">new</span> Random<span style="color:#000;font-weight:bold">().</span><span style="color:#008080">nextFloat</span><span style="color:#000;font-weight:bold">());</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * 获取字体大小按范围随机  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *   
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param h 验证码图片高  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @return  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">private</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#458;font-weight:bold">int</span> <span style="color:#900;font-weight:bold">getRandomFontSize</span><span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> h<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> min <span style="color:#000;font-weight:bold">=</span> h <span style="color:#000;font-weight:bold">-</span> 8<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// int max = 46;    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        Random random <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> Random<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> random<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>11<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">+</span> min<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * 3D中空字体自定义属性类  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *   
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @author Anttu  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @date 2017年5月15日 下午3:27:52  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">class</span> <span style="color:#458;font-weight:bold">ImgFontByte</span>
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">public</span> Font <span style="color:#900;font-weight:bold">getFont</span><span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> fontSize<span style="color:#000;font-weight:bold">,</span> <span style="color:#458;font-weight:bold">int</span> fontStype<span style="color:#000;font-weight:bold">)</span>
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">try</span>
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>
</span></span><span style="display:flex;"><span>                Font font <span style="color:#000;font-weight:bold">=</span> baseFont<span style="color:#000;font-weight:bold">;</span>
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>baseFont <span style="color:#000;font-weight:bold">==</span> <span style="color:#000;font-weight:bold">null</span><span style="color:#000;font-weight:bold">)</span>
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">{</span>
</span></span><span style="display:flex;"><span>                    font <span style="color:#000;font-weight:bold">=</span> Font<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">createFont</span><span style="color:#000;font-weight:bold">(</span>Font<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">TRUETYPE_FONT</span><span style="color:#000;font-weight:bold">,</span> RandomVerifyImgCodeUtils<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">class</span><span style="color:#000;font-weight:bold">.</span><span style="color:#008080">getClassLoader</span><span style="color:#000;font-weight:bold">()</span>
</span></span><span style="display:flex;"><span>                            <span style="color:#000;font-weight:bold">.</span><span style="color:#008080">getResourceAsStream</span><span style="color:#000;font-weight:bold">(</span><span style="color:#d14">&#34;fonts/ActionJackson.TTF&#34;</span><span style="color:#000;font-weight:bold">));</span>
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">}</span>
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">return</span> font<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">deriveFont</span><span style="color:#000;font-weight:bold">(</span>fontStype<span style="color:#000;font-weight:bold">,</span> fontSize<span style="color:#000;font-weight:bold">);</span>
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">catch</span> <span style="color:#000;font-weight:bold">(</span>Exception e<span style="color:#000;font-weight:bold">)</span>
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">return</span> <span style="color:#000;font-weight:bold">new</span> Font<span style="color:#000;font-weight:bold">(</span><span style="color:#d14">&#34;Arial&#34;</span><span style="color:#000;font-weight:bold">,</span> fontStype<span style="color:#000;font-weight:bold">,</span> fontSize<span style="color:#000;font-weight:bold">);</span>
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * 字符和干扰线扭曲  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *   
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param g 绘制图形的java工具类  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param w1 验证码图片宽  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param h1 验证码图片高  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param color 颜色  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">private</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">shear</span><span style="color:#000;font-weight:bold">(</span>Graphics g<span style="color:#000;font-weight:bold">,</span> <span style="color:#458;font-weight:bold">int</span> w1<span style="color:#000;font-weight:bold">,</span> <span style="color:#458;font-weight:bold">int</span> h1<span style="color:#000;font-weight:bold">,</span> Color color<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        shearX<span style="color:#000;font-weight:bold">(</span>g<span style="color:#000;font-weight:bold">,</span> w1<span style="color:#000;font-weight:bold">,</span> h1<span style="color:#000;font-weight:bold">,</span> color<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        shearY<span style="color:#000;font-weight:bold">(</span>g<span style="color:#000;font-weight:bold">,</span> w1<span style="color:#000;font-weight:bold">,</span> h1<span style="color:#000;font-weight:bold">,</span> color<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * x轴扭曲  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *   
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param g 绘制图形的java工具类  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param w1 验证码图片宽  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param h1 验证码图片高  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param color 颜色  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">private</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">shearX</span><span style="color:#000;font-weight:bold">(</span>Graphics g<span style="color:#000;font-weight:bold">,</span> <span style="color:#458;font-weight:bold">int</span> w1<span style="color:#000;font-weight:bold">,</span> <span style="color:#458;font-weight:bold">int</span> h1<span style="color:#000;font-weight:bold">,</span> Color color<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> period <span style="color:#000;font-weight:bold">=</span> random<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>2<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">boolean</span> borderGap <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">true</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> frames <span style="color:#000;font-weight:bold">=</span> 1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> phase <span style="color:#000;font-weight:bold">=</span> random<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>2<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> i <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> i <span style="color:#000;font-weight:bold">&lt;</span> h1<span style="color:#000;font-weight:bold">;</span> i<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#458;font-weight:bold">double</span> d <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">double</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">(</span>period <span style="color:#000;font-weight:bold">&gt;&gt;</span> 1<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">*</span> Math<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">sin</span><span style="color:#000;font-weight:bold">((</span><span style="color:#458;font-weight:bold">double</span><span style="color:#000;font-weight:bold">)</span> i <span style="color:#000;font-weight:bold">/</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">double</span><span style="color:#000;font-weight:bold">)</span> period <span style="color:#000;font-weight:bold">+</span> <span style="color:#000;font-weight:bold">(</span>6<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">2831853071795862D</span> <span style="color:#000;font-weight:bold">*</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">double</span><span style="color:#000;font-weight:bold">)</span> phase<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">/</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">double</span><span style="color:#000;font-weight:bold">)</span> frames<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            g<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">copyArea</span><span style="color:#000;font-weight:bold">(</span>0<span style="color:#000;font-weight:bold">,</span> i<span style="color:#000;font-weight:bold">,</span> w1<span style="color:#000;font-weight:bold">,</span> 1<span style="color:#000;font-weight:bold">,</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">)</span> d<span style="color:#000;font-weight:bold">,</span> 0<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>borderGap<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                g<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">setColor</span><span style="color:#000;font-weight:bold">(</span>color<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>                g<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">drawLine</span><span style="color:#000;font-weight:bold">((</span><span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">)</span> d<span style="color:#000;font-weight:bold">,</span> i<span style="color:#000;font-weight:bold">,</span> 0<span style="color:#000;font-weight:bold">,</span> i<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>                g<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">drawLine</span><span style="color:#000;font-weight:bold">((</span><span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">)</span> d <span style="color:#000;font-weight:bold">+</span> w1<span style="color:#000;font-weight:bold">,</span> i<span style="color:#000;font-weight:bold">,</span> w1<span style="color:#000;font-weight:bold">,</span> i<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * y轴扭曲  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *   
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param g 绘制图形的java工具类  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param w1 验证码图片宽  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param h1 验证码图片高  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param color 颜色  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">private</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">shearY</span><span style="color:#000;font-weight:bold">(</span>Graphics g<span style="color:#000;font-weight:bold">,</span> <span style="color:#458;font-weight:bold">int</span> w1<span style="color:#000;font-weight:bold">,</span> <span style="color:#458;font-weight:bold">int</span> h1<span style="color:#000;font-weight:bold">,</span> Color color<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> period <span style="color:#000;font-weight:bold">=</span> random<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>40<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">+</span> 10<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// 50;    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">boolean</span> borderGap <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">true</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> frames <span style="color:#000;font-weight:bold">=</span> 20<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> phase <span style="color:#000;font-weight:bold">=</span> 7<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> i <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> i <span style="color:#000;font-weight:bold">&lt;</span> w1<span style="color:#000;font-weight:bold">;</span> i<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#458;font-weight:bold">double</span> d <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">double</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">(</span>period <span style="color:#000;font-weight:bold">&gt;&gt;</span> 1<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">*</span> Math<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">sin</span><span style="color:#000;font-weight:bold">((</span><span style="color:#458;font-weight:bold">double</span><span style="color:#000;font-weight:bold">)</span> i <span style="color:#000;font-weight:bold">/</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">double</span><span style="color:#000;font-weight:bold">)</span> period <span style="color:#000;font-weight:bold">+</span> <span style="color:#000;font-weight:bold">(</span>6<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">2831853071795862D</span> <span style="color:#000;font-weight:bold">*</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">double</span><span style="color:#000;font-weight:bold">)</span> phase<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">/</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">double</span><span style="color:#000;font-weight:bold">)</span> frames<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            g<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">copyArea</span><span style="color:#000;font-weight:bold">(</span>i<span style="color:#000;font-weight:bold">,</span> 0<span style="color:#000;font-weight:bold">,</span> 1<span style="color:#000;font-weight:bold">,</span> h1<span style="color:#000;font-weight:bold">,</span> 0<span style="color:#000;font-weight:bold">,</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">)</span> d<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>borderGap<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                g<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">setColor</span><span style="color:#000;font-weight:bold">(</span>color<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>                g<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">drawLine</span><span style="color:#000;font-weight:bold">(</span>i<span style="color:#000;font-weight:bold">,</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">)</span> d<span style="color:#000;font-weight:bold">,</span> i<span style="color:#000;font-weight:bold">,</span> 0<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>                g<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">drawLine</span><span style="color:#000;font-weight:bold">(</span>i<span style="color:#000;font-weight:bold">,</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">)</span> d <span style="color:#000;font-weight:bold">+</span> h1<span style="color:#000;font-weight:bold">,</span> i<span style="color:#000;font-weight:bold">,</span> h1<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * 获取透明度,从0到1,自动计算步长  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *   
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param i  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param j  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @return float 透明度  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">private</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#458;font-weight:bold">float</span> <span style="color:#900;font-weight:bold">getAlpha</span><span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> i<span style="color:#000;font-weight:bold">,</span> <span style="color:#458;font-weight:bold">int</span> j<span style="color:#000;font-weight:bold">,</span> <span style="color:#458;font-weight:bold">int</span> verifySize<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> num <span style="color:#000;font-weight:bold">=</span> i <span style="color:#000;font-weight:bold">+</span> j<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">float</span> r <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">float</span><span style="color:#000;font-weight:bold">)</span> 1 <span style="color:#000;font-weight:bold">/</span> verifySize<span style="color:#000;font-weight:bold">,</span> s <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span>verifySize <span style="color:#000;font-weight:bold">+</span> 1<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">*</span> r<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> num <span style="color:#000;font-weight:bold">&gt;</span> verifySize <span style="color:#000;font-weight:bold">?</span> <span style="color:#000;font-weight:bold">(</span>num <span style="color:#000;font-weight:bold">*</span> r <span style="color:#000;font-weight:bold">-</span> s<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">:</span> num <span style="color:#000;font-weight:bold">*</span> r<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * 生成指定验证码图像文件 - 本地测试生成图片查看效果  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *   
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param w 验证码图片宽  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param h 验证码图片高  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param outputFile 文件流  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param code 随机验证码  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @throws IOException  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">outputImage</span><span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> w<span style="color:#000;font-weight:bold">,</span> <span style="color:#458;font-weight:bold">int</span> h<span style="color:#000;font-weight:bold">,</span> File outputFile<span style="color:#000;font-weight:bold">,</span> String code<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">throws</span> IOException    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>outputFile <span style="color:#000;font-weight:bold">==</span> <span style="color:#000;font-weight:bold">null</span><span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">return</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        File dir <span style="color:#000;font-weight:bold">=</span> outputFile<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">getParentFile</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(!</span>dir<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">exists</span><span style="color:#000;font-weight:bold">())</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            dir<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">mkdirs</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">try</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            outputFile<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">createNewFile</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>            FileOutputStream fos <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> FileOutputStream<span style="color:#000;font-weight:bold">(</span>outputFile<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#998;font-style:italic">// outputImage(w, h, fos, code, &#34;login&#34;); //测试登录，噪点和干扰线为0.05f和20    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>            <span style="color:#998;font-style:italic">// outputImage(w, h, fos, code, &#34;coupons&#34;); //测试领券，噪点和干扰线为范围随机值0.05f ~ 0.1f和20 ~ 155    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>            <span style="color:#998;font-style:italic">// outputImage(w, h, fos, code, &#34;3D&#34;); //测试领券，噪点和干扰线为范围随机值0.05f ~ 0.1f和20 ~ 155    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>            <span style="color:#998;font-style:italic">// outputImage(w, h, fos, code, &#34;GIF&#34;); //测试领券，噪点和干扰线为范围随机值0.05f ~ 0.1f和20 ~ 155    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>            <span style="color:#998;font-style:italic">// outputImage(w, h, fos, code, &#34;GIF3D&#34;); //测试领券，噪点和干扰线为范围随机值0.05f ~ 0.1f和20 ~ 155    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>            <span style="color:#998;font-style:italic">// outputImage(w, h, fos, code, &#34;mix2&#34;); //测试领券，噪点和干扰线为范围随机值0.05f ~ 0.1f和20 ~ 155    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>            outputImage<span style="color:#000;font-weight:bold">(</span>w<span style="color:#000;font-weight:bold">,</span> h<span style="color:#000;font-weight:bold">,</span> fos<span style="color:#000;font-weight:bold">,</span> code<span style="color:#000;font-weight:bold">,</span> <span style="color:#d14">&#34;mixGIF&#34;</span><span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// 测试领券，噪点和干扰线为范围随机值0.05f ~ 0.1f和20 ~ 155    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>            fos<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">close</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">catch</span> <span style="color:#000;font-weight:bold">(</span>IOException e<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">throw</span> e<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * 本地测试类，可以生成样例验证码图片供观看效果  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *   
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param args  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @throws IOException  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">main</span><span style="color:#000;font-weight:bold">(</span>String<span style="color:#000;font-weight:bold">[]</span> args<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">throws</span> IOException    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        File dir <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> File<span style="color:#000;font-weight:bold">(</span><span style="color:#d14">&#34;E:/logtest/verifies8&#34;</span><span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> w <span style="color:#000;font-weight:bold">=</span> 120<span style="color:#000;font-weight:bold">,</span> h <span style="color:#000;font-weight:bold">=</span> 48<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> i <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> i <span style="color:#000;font-weight:bold">&lt;</span> 150<span style="color:#000;font-weight:bold">;</span> i<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            String verifyCode <span style="color:#000;font-weight:bold">=</span> generateVerifyCode<span style="color:#000;font-weight:bold">(</span>4<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            File file <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> File<span style="color:#000;font-weight:bold">(</span>dir<span style="color:#000;font-weight:bold">,</span> verifyCode <span style="color:#000;font-weight:bold">+</span> <span style="color:#d14">&#34;.gif&#34;</span><span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            outputImage<span style="color:#000;font-weight:bold">(</span>w<span style="color:#000;font-weight:bold">,</span> h<span style="color:#000;font-weight:bold">,</span> file<span style="color:#000;font-weight:bold">,</span> verifyCode<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="22-调用示例">2.2 调用示例</h3>
<div class="highlight"><div style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">25
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">26
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">27
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">28
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">29
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">30
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">31
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">32
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">33
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">34
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">35
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">36
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">37
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">38
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">39
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">40
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">41
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">42
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">43
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">44
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">45
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">46
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">47
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">48
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">49
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">50
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">51
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">52
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">53
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">54
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">55
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">56
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">57
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">58
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">59
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">60
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">61
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">62
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">63
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">64
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#000;font-weight:bold">public</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">doGet</span><span style="color:#000;font-weight:bold">(</span>HttpServletRequest request<span style="color:#000;font-weight:bold">,</span> HttpServletResponse response<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">throws</span> ServletException<span style="color:#000;font-weight:bold">,</span> IOException  
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span>  
</span></span><span style="display:flex;"><span>    response<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">setContentType</span><span style="color:#000;font-weight:bold">(</span><span style="color:#d14">&#34;image/jpeg&#34;</span><span style="color:#000;font-weight:bold">);</span>  
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">// 设置相应类型,告诉浏览器输出的内容为图片  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    response<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">setHeader</span><span style="color:#000;font-weight:bold">(</span><span style="color:#d14">&#34;Pragma&#34;</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#d14">&#34;No-cache&#34;</span><span style="color:#000;font-weight:bold">);</span>  
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">// 设置响应头信息，告诉浏览器不要缓存此内容  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    response<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">setHeader</span><span style="color:#000;font-weight:bold">(</span><span style="color:#d14">&#34;Cache-Control&#34;</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#d14">&#34;no-cache&#34;</span><span style="color:#000;font-weight:bold">);</span>  
</span></span><span style="display:flex;"><span>    response<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">setDateHeader</span><span style="color:#000;font-weight:bold">(</span><span style="color:#d14">&#34;Expire&#34;</span><span style="color:#000;font-weight:bold">,</span> 0<span style="color:#000;font-weight:bold">);</span>  
</span></span><span style="display:flex;"><span>      
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">try</span>  
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>  
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// 生成随机验证码  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#458;font-weight:bold">int</span> charSize <span style="color:#000;font-weight:bold">=</span> 4<span style="color:#000;font-weight:bold">;</span>  
</span></span><span style="display:flex;"><span>        String verifyCode <span style="color:#000;font-weight:bold">=</span> RandomVerifyImgCodeUtil<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">generateVerifyCode</span><span style="color:#000;font-weight:bold">(</span>charSize<span style="color:#000;font-weight:bold">);</span>  
</span></span><span style="display:flex;"><span>          
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>StringUtils<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">isNotBlank</span><span style="color:#000;font-weight:bold">(</span>verifyCode<span style="color:#000;font-weight:bold">))</span>  
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>  
</span></span><span style="display:flex;"><span>            RedisUtil redisUtil <span style="color:#000;font-weight:bold">=</span> SpringContextUtils<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">getBean</span><span style="color:#000;font-weight:bold">(</span>RedisUtil<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">class</span><span style="color:#000;font-weight:bold">);</span>  
</span></span><span style="display:flex;"><span>              
</span></span><span style="display:flex;"><span>            String key <span style="color:#000;font-weight:bold">=</span> request<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">getSession</span><span style="color:#000;font-weight:bold">().</span><span style="color:#008080">getId</span><span style="color:#000;font-weight:bold">()</span> <span style="color:#000;font-weight:bold">+</span> <span style="color:#d14">&#34;_&#34;</span> <span style="color:#000;font-weight:bold">+</span> RANDOMCODEKEY<span style="color:#000;font-weight:bold">;</span>  
</span></span><span style="display:flex;"><span>            redisUtil<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">set</span><span style="color:#000;font-weight:bold">(</span>key<span style="color:#000;font-weight:bold">,</span> verifyCode<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">toString</span><span style="color:#000;font-weight:bold">());</span>  
</span></span><span style="display:flex;"><span>            <span style="color:#998;font-style:italic">/** 设置sesionTooken,90s后失效 **/</span>  
</span></span><span style="display:flex;"><span>            redisUtil<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">expired</span><span style="color:#000;font-weight:bold">(</span>key<span style="color:#000;font-weight:bold">,</span> 90<span style="color:#000;font-weight:bold">);</span>  
</span></span><span style="display:flex;"><span>              
</span></span><span style="display:flex;"><span>            <span style="color:#998;font-style:italic">// 再次存cookie备份  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>            CookieUtil<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">addCookie</span><span style="color:#000;font-weight:bold">(</span>request<span style="color:#000;font-weight:bold">,</span> response<span style="color:#000;font-weight:bold">,</span> RANDOMCODEKEY<span style="color:#000;font-weight:bold">,</span> verifyCode<span style="color:#000;font-weight:bold">,</span> 300<span style="color:#000;font-weight:bold">);</span>  
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>  
</span></span><span style="display:flex;"><span>          
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// 生成图片规格w宽 h高   
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#458;font-weight:bold">int</span> w <span style="color:#000;font-weight:bold">=</span> 100<span style="color:#000;font-weight:bold">,</span> h <span style="color:#000;font-weight:bold">=</span> 40<span style="color:#000;font-weight:bold">;</span>  
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> type <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> Random<span style="color:#000;font-weight:bold">().</span><span style="color:#008080">nextInt</span><span style="color:#000;font-weight:bold">(</span>7<span style="color:#000;font-weight:bold">);</span>   
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">switch</span><span style="color:#000;font-weight:bold">(</span>type<span style="color:#000;font-weight:bold">)</span>  
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>  
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">case</span> 0<span style="color:#000;font-weight:bold">:</span>  
</span></span><span style="display:flex;"><span>                RandomVerifyImgCodeUtil<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">outputImage</span><span style="color:#000;font-weight:bold">(</span>w<span style="color:#000;font-weight:bold">,</span> h<span style="color:#000;font-weight:bold">,</span> response<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">getOutputStream</span><span style="color:#000;font-weight:bold">(),</span> verifyCode<span style="color:#000;font-weight:bold">,</span> <span style="color:#d14">&#34;login&#34;</span><span style="color:#000;font-weight:bold">);</span> 
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">break</span><span style="color:#000;font-weight:bold">;</span>  
</span></span><span style="display:flex;"><span>             <span style="color:#000;font-weight:bold">case</span> 1<span style="color:#000;font-weight:bold">:</span>  
</span></span><span style="display:flex;"><span>                RandomVerifyImgCodeUtil<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">outputImage</span><span style="color:#000;font-weight:bold">(</span>w<span style="color:#000;font-weight:bold">,</span> h<span style="color:#000;font-weight:bold">,</span> response<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">getOutputStream</span><span style="color:#000;font-weight:bold">(),</span> verifyCode<span style="color:#000;font-weight:bold">,</span> <span style="color:#d14">&#34;GIF&#34;</span><span style="color:#000;font-weight:bold">);</span>
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">break</span><span style="color:#000;font-weight:bold">;</span>  
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">case</span> 2<span style="color:#000;font-weight:bold">:</span>  
</span></span><span style="display:flex;"><span>                RandomVerifyImgCodeUtil<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">outputImage</span><span style="color:#000;font-weight:bold">(</span>w<span style="color:#000;font-weight:bold">,</span> h<span style="color:#000;font-weight:bold">,</span> response<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">getOutputStream</span><span style="color:#000;font-weight:bold">(),</span> verifyCode<span style="color:#000;font-weight:bold">,</span> <span style="color:#d14">&#34;3D&#34;</span><span style="color:#000;font-weight:bold">);</span>  
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">break</span><span style="color:#000;font-weight:bold">;</span>  
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">case</span> 3<span style="color:#000;font-weight:bold">:</span>  
</span></span><span style="display:flex;"><span>                RandomVerifyImgCodeUtil<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">outputImage</span><span style="color:#000;font-weight:bold">(</span>w<span style="color:#000;font-weight:bold">,</span> h<span style="color:#000;font-weight:bold">,</span> response<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">getOutputStream</span><span style="color:#000;font-weight:bold">(),</span> verifyCode<span style="color:#000;font-weight:bold">,</span> <span style="color:#d14">&#34;GIF3D&#34;</span><span style="color:#000;font-weight:bold">);</span>
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">break</span><span style="color:#000;font-weight:bold">;</span>  
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">case</span> 4<span style="color:#000;font-weight:bold">:</span>  
</span></span><span style="display:flex;"><span>                RandomVerifyImgCodeUtil<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">outputImage</span><span style="color:#000;font-weight:bold">(</span>w<span style="color:#000;font-weight:bold">,</span> h<span style="color:#000;font-weight:bold">,</span> response<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">getOutputStream</span><span style="color:#000;font-weight:bold">(),</span> verifyCode<span style="color:#000;font-weight:bold">,</span> <span style="color:#d14">&#34;mix2&#34;</span><span style="color:#000;font-weight:bold">);</span>  
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">break</span><span style="color:#000;font-weight:bold">;</span>  
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">case</span> 5<span style="color:#000;font-weight:bold">:</span>  
</span></span><span style="display:flex;"><span>                RandomVerifyImgCodeUtil<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">outputImage</span><span style="color:#000;font-weight:bold">(</span>w<span style="color:#000;font-weight:bold">,</span> h<span style="color:#000;font-weight:bold">,</span> response<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">getOutputStream</span><span style="color:#000;font-weight:bold">(),</span> verifyCode<span style="color:#000;font-weight:bold">,</span> <span style="color:#d14">&#34;mixGIF&#34;</span><span style="color:#000;font-weight:bold">);</span>
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">break</span><span style="color:#000;font-weight:bold">;</span>  
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">case</span> 6<span style="color:#000;font-weight:bold">:</span>  
</span></span><span style="display:flex;"><span>                RandomVerifyImgCodeUtil<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">outputImage</span><span style="color:#000;font-weight:bold">(</span>w<span style="color:#000;font-weight:bold">,</span> h<span style="color:#000;font-weight:bold">,</span> response<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">getOutputStream</span><span style="color:#000;font-weight:bold">(),</span> verifyCode<span style="color:#000;font-weight:bold">,</span> <span style="color:#d14">&#34;coupons&#34;</span><span style="color:#000;font-weight:bold">);</span>  
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">break</span><span style="color:#000;font-weight:bold">;</span>  
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">default</span><span style="color:#000;font-weight:bold">:</span>  
</span></span><span style="display:flex;"><span>                RandomVerifyImgCodeUtil<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">outputImage</span><span style="color:#000;font-weight:bold">(</span>w<span style="color:#000;font-weight:bold">,</span> h<span style="color:#000;font-weight:bold">,</span> response<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">getOutputStream</span><span style="color:#000;font-weight:bold">(),</span> verifyCode<span style="color:#000;font-weight:bold">,</span> <span style="color:#d14">&#34;mixGIF&#34;</span><span style="color:#000;font-weight:bold">);</span>
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">break</span><span style="color:#000;font-weight:bold">;</span>  
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>             
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>  
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">catch</span> <span style="color:#000;font-weight:bold">(</span>Exception e<span style="color:#000;font-weight:bold">)</span>  
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>  
</span></span><span style="display:flex;"><span>        logger<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">error</span><span style="color:#000;font-weight:bold">(</span>e<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">getMessage</span><span style="color:#000;font-weight:bold">(),</span> e<span style="color:#000;font-weight:bold">);</span>  
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>  
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span>    
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="23-用到的老外的工具类共计4个如果只是生成的话用不了这么多">2.3 用到的老外的工具类：共计4个，如果只是生成的话用不了这么多</h3>
<h4 id="231-encoder">2.3.1 Encoder</h4>
<div class="highlight"><div style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  1
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  2
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  3
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  4
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  5
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  6
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  7
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  8
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  9
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 10
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 11
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 12
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 13
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 14
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 15
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 16
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 17
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 18
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 19
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 20
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 21
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 22
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 23
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 24
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 25
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 26
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 27
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 28
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 29
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 30
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 31
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 32
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 33
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 34
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 35
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 36
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 37
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 38
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 39
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 40
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 41
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 42
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 43
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 44
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 45
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 46
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 47
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 48
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 49
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 50
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 51
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 52
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 53
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 54
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 55
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 56
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 57
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 58
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 59
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 60
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 61
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 62
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 63
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 64
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 65
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 66
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 67
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 68
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 69
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 70
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 71
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 72
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 73
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 74
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 75
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 76
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 77
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 78
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 79
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 80
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 81
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 82
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 83
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 84
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 85
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 86
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 87
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 88
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 89
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 90
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 91
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 92
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 93
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 94
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 95
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 96
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 97
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 98
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 99
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">100
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">101
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">102
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">103
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">104
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">105
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">106
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">107
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">108
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">109
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">110
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">111
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">112
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">113
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">114
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">115
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">116
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">117
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">118
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">119
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">120
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">121
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">122
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">123
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">124
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">125
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">126
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">127
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">128
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">129
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">130
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">131
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">132
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">133
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">134
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">135
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">136
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">137
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">138
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">139
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">140
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">141
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">142
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">143
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">144
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">145
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">146
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">147
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">148
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">149
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">150
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">151
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">152
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">153
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">154
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">155
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">156
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">157
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">158
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">159
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">160
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">161
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">162
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">163
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">164
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">165
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">166
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">167
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">168
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">169
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">170
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">171
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">172
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">173
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">174
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">175
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">176
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">177
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">178
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">179
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">180
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">181
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">182
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">183
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">184
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">185
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">186
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">187
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">188
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">189
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">190
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">191
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">192
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">193
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">194
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">195
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">196
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">197
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">198
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">199
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">200
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">201
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">202
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">203
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">204
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">205
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">206
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">207
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">208
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">209
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">210
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">211
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">212
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">213
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">214
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">215
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">216
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">217
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">218
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">219
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">220
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">221
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">222
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">223
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">224
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">225
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">226
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">227
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">228
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">229
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">230
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">231
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">232
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">233
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">234
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">235
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">236
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">237
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">238
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">239
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">240
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">241
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">242
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">243
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">244
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">245
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">246
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">247
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">248
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">249
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">250
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">251
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">252
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">253
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">254
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">255
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">256
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">257
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">258
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">259
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">260
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">261
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">262
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">263
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">264
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">265
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">266
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">267
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">268
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">269
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">270
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">271
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">272
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">273
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">274
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">275
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">276
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">277
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">278
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">279
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">280
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">281
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">282
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">283
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">284
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">285
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">286
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">287
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">288
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">289
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">290
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">291
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">292
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">293
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">294
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">295
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">296
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">297
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">298
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">299
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">300
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">301
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">302
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">303
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">304
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">305
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">306
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">307
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">308
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">309
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">310
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">311
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">312
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">313
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">314
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#000;font-weight:bold">package</span> <span style="color:#555">com.test.test</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.io.IOException</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.io.OutputStream</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> * @author: wuhongjun  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> * @version:1.0  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> */</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">public</span> <span style="color:#000;font-weight:bold">class</span> <span style="color:#458;font-weight:bold">Encoder</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">private</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> EOF <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">-</span>1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">private</span> <span style="color:#458;font-weight:bold">int</span> imgW<span style="color:#000;font-weight:bold">,</span> imgH<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">private</span> <span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">[]</span> pixAry<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">private</span> <span style="color:#458;font-weight:bold">int</span> initCodeSize<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">private</span> <span style="color:#458;font-weight:bold">int</span> remaining<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">private</span> <span style="color:#458;font-weight:bold">int</span> curPixel<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">// GIFCOMPR.C - GIF Image compression routines    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">//    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// Lempel-Ziv compression based on &#39;compress&#39;. GIF modifications by    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// David Rowley (mgardi@watdcsu.waterloo.edu)    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">// General DEFINEs    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> BITS <span style="color:#000;font-weight:bold">=</span> 12<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> HSIZE <span style="color:#000;font-weight:bold">=</span> 5003<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// 80% occupancy    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">// GIF Image compression - modified &#39;compress&#39;    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">//    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// Based on: compress.c - File compression ala IEEE Computer, June 1984.    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">//    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// By Authors: Spencer W. Thomas (decvax!harpo!utah-cs!utah-gr!thomas)    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// Jim McKie (decvax!mcvax!jim)    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// Steve Davies (decvax!vax135!petsd!peora!srd)    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// Ken Turkowski (decvax!decwrl!turtlevax!ken)    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// James A. Woods (decvax!ihnp4!ames!jaw)    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// Joe Orost (decvax!vax135!petsd!joe)    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>    <span style="color:#458;font-weight:bold">int</span> n_bits<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// number of bits/code    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#458;font-weight:bold">int</span> maxbits <span style="color:#000;font-weight:bold">=</span> BITS<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// user settable max # bits/code    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#458;font-weight:bold">int</span> maxcode<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// maximum code, given n_bits    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#458;font-weight:bold">int</span> maxmaxcode <span style="color:#000;font-weight:bold">=</span> 1 <span style="color:#000;font-weight:bold">&lt;&lt;</span> BITS<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// should NEVER generate this code    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>    <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[]</span> htab <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[</span>HSIZE<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[]</span> codetab <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[</span>HSIZE<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#458;font-weight:bold">int</span> hsize <span style="color:#000;font-weight:bold">=</span> HSIZE<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// for dynamic table sizing    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>    <span style="color:#458;font-weight:bold">int</span> free_ent <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// first unused entry    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">// block compression parameters -- after all codes are used up,    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// and compression rate changes, start over.    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#458;font-weight:bold">boolean</span> clear_flg <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">false</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">// Algorithm: use open addressing double hashing (no chaining) on the    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// prefix code / next character combination. We do a variant of Knuth&#39;s    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// algorithm D (vol. 3, sec. 6.4) along with G. Knott&#39;s relatively-prime    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// secondary probe. Here, the modular division first probe is gives way    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// to a faster exclusive-or manipulation. Also do block compression with    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// an adaptive reset, whereby the code table is cleared when the compression    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// ratio decreases, but after the table fills. The variable-length output    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// codes are re-sized at this point, and a special CLEAR code is generated    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// for the decompressor. Late addition: construct the table according to    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// file size for noticeable speed improvement on small files. Please direct    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// questions about this implementation to ames!jaw.    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>    <span style="color:#458;font-weight:bold">int</span> g_init_bits<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#458;font-weight:bold">int</span> ClearCode<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#458;font-weight:bold">int</span> EOFCode<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">// output    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">//    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// Output the given code.    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// Inputs:    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// code: A n_bits-bit integer. If == -1, then EOF. This assumes    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// that n_bits =&lt; wordsize - 1.    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// Outputs:    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// Outputs code to the file.    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// Assumptions:    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// Chars are 8 bits long.    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// Algorithm:    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// Maintain a BITS character long buffer (so that 8 codes will    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// fit in it exactly). Use the VAX insv instruction to insert each    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// code in turn. When the buffer fills up empty it and start over.    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>    <span style="color:#458;font-weight:bold">int</span> cur_accum <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#458;font-weight:bold">int</span> cur_bits <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#458;font-weight:bold">int</span> masks<span style="color:#000;font-weight:bold">[]</span> <span style="color:#000;font-weight:bold">=</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            0x0000<span style="color:#000;font-weight:bold">,</span> 0x0001<span style="color:#000;font-weight:bold">,</span> 0x0003<span style="color:#000;font-weight:bold">,</span> 0x0007<span style="color:#000;font-weight:bold">,</span> 0x000F<span style="color:#000;font-weight:bold">,</span> 0x001F<span style="color:#000;font-weight:bold">,</span> 0x003F<span style="color:#000;font-weight:bold">,</span> 0x007F<span style="color:#000;font-weight:bold">,</span> 0x00FF<span style="color:#000;font-weight:bold">,</span> 0x01FF<span style="color:#000;font-weight:bold">,</span> 0x03FF<span style="color:#000;font-weight:bold">,</span> 0x07FF<span style="color:#000;font-weight:bold">,</span> 0x0FFF<span style="color:#000;font-weight:bold">,</span> 0x1FFF<span style="color:#000;font-weight:bold">,</span> 0x3FFF<span style="color:#000;font-weight:bold">,</span> 0x7FFF<span style="color:#000;font-weight:bold">,</span> 0xFFFF    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">};</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">// Number of characters so far in this &#39;packet&#39;    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#458;font-weight:bold">int</span> a_count<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">// Define the storage for the packet accumulator    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">[]</span> accum <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> <span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">[</span>256<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">// ----------------------------------------------------------------------------    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    Encoder<span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> width<span style="color:#000;font-weight:bold">,</span> <span style="color:#458;font-weight:bold">int</span> height<span style="color:#000;font-weight:bold">,</span> <span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">[]</span> pixels<span style="color:#000;font-weight:bold">,</span> <span style="color:#458;font-weight:bold">int</span> color_depth<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        imgW <span style="color:#000;font-weight:bold">=</span> width<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        imgH <span style="color:#000;font-weight:bold">=</span> height<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        pixAry <span style="color:#000;font-weight:bold">=</span> pixels<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        initCodeSize <span style="color:#000;font-weight:bold">=</span> Math<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">max</span><span style="color:#000;font-weight:bold">(</span>2<span style="color:#000;font-weight:bold">,</span> color_depth<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">// Add a character to the end of the current packet, and if it is 254    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// characters, flush the packet to disk.    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">char_out</span><span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">byte</span> c<span style="color:#000;font-weight:bold">,</span> OutputStream outs<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">throws</span> IOException    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        accum<span style="color:#000;font-weight:bold">[</span>a_count<span style="color:#000;font-weight:bold">++]</span> <span style="color:#000;font-weight:bold">=</span> c<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>a_count <span style="color:#000;font-weight:bold">&gt;=</span> 254<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            flush_char<span style="color:#000;font-weight:bold">(</span>outs<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">// Clear out the hash table    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">// table clear for block compress    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">cl_block</span><span style="color:#000;font-weight:bold">(</span>OutputStream outs<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">throws</span> IOException    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        cl_hash<span style="color:#000;font-weight:bold">(</span>hsize<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        free_ent <span style="color:#000;font-weight:bold">=</span> ClearCode <span style="color:#000;font-weight:bold">+</span> 2<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        clear_flg <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">true</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        output<span style="color:#000;font-weight:bold">(</span>ClearCode<span style="color:#000;font-weight:bold">,</span> outs<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">// reset code table    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">cl_hash</span><span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> hsize<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> i <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> i <span style="color:#000;font-weight:bold">&lt;</span> hsize<span style="color:#000;font-weight:bold">;</span> <span style="color:#000;font-weight:bold">++</span>i<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            htab<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">-</span>1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">compress</span><span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> init_bits<span style="color:#000;font-weight:bold">,</span> OutputStream outs<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">throws</span> IOException    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> fcode<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> i <span style="color:#998;font-style:italic">/* = 0 */</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> c<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> ent<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> disp<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> hsize_reg<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> hshift<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// Set up the globals: g_init_bits - initial number of bits    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        g_init_bits <span style="color:#000;font-weight:bold">=</span> init_bits<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// Set up the necessary values    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        clear_flg <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">false</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        n_bits <span style="color:#000;font-weight:bold">=</span> g_init_bits<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        maxcode <span style="color:#000;font-weight:bold">=</span> MAXCODE<span style="color:#000;font-weight:bold">(</span>n_bits<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        ClearCode <span style="color:#000;font-weight:bold">=</span> 1 <span style="color:#000;font-weight:bold">&lt;&lt;</span> <span style="color:#000;font-weight:bold">(</span>init_bits <span style="color:#000;font-weight:bold">-</span> 1<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        EOFCode <span style="color:#000;font-weight:bold">=</span> ClearCode <span style="color:#000;font-weight:bold">+</span> 1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        free_ent <span style="color:#000;font-weight:bold">=</span> ClearCode <span style="color:#000;font-weight:bold">+</span> 2<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        a_count <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// clear packet    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>        ent <span style="color:#000;font-weight:bold">=</span> nextPixel<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        hshift <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span>fcode <span style="color:#000;font-weight:bold">=</span> hsize<span style="color:#000;font-weight:bold">;</span> fcode <span style="color:#000;font-weight:bold">&lt;</span> 65536<span style="color:#000;font-weight:bold">;</span> fcode <span style="color:#000;font-weight:bold">*=</span> 2<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">++</span>hshift<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        hshift <span style="color:#000;font-weight:bold">=</span> 8 <span style="color:#000;font-weight:bold">-</span> hshift<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// set hash code range bound    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>        hsize_reg <span style="color:#000;font-weight:bold">=</span> hsize<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        cl_hash<span style="color:#000;font-weight:bold">(</span>hsize_reg<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// clear hash table    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>        output<span style="color:#000;font-weight:bold">(</span>ClearCode<span style="color:#000;font-weight:bold">,</span> outs<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        outer_loop<span style="color:#000;font-weight:bold">:</span> <span style="color:#000;font-weight:bold">while</span> <span style="color:#000;font-weight:bold">((</span>c <span style="color:#000;font-weight:bold">=</span> nextPixel<span style="color:#000;font-weight:bold">())</span> <span style="color:#000;font-weight:bold">!=</span> EOF<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            fcode <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span>c <span style="color:#000;font-weight:bold">&lt;&lt;</span> maxbits<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">+</span> ent<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            i <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span>c <span style="color:#000;font-weight:bold">&lt;&lt;</span> hshift<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">^</span> ent<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// xor hashing    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>htab<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">==</span> fcode<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                ent <span style="color:#000;font-weight:bold">=</span> codetab<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">continue</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">else</span> <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>htab<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">&gt;=</span> 0<span style="color:#000;font-weight:bold">)</span> <span style="color:#998;font-style:italic">// non-empty slot    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                disp <span style="color:#000;font-weight:bold">=</span> hsize_reg <span style="color:#000;font-weight:bold">-</span> i<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// secondary hash (after G. Knott)    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>i <span style="color:#000;font-weight:bold">==</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                    disp <span style="color:#000;font-weight:bold">=</span> 1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">do</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">((</span>i <span style="color:#000;font-weight:bold">-=</span> disp<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">&lt;</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                        i <span style="color:#000;font-weight:bold">+=</span> hsize_reg<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>htab<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">==</span> fcode<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                        ent <span style="color:#000;font-weight:bold">=</span> codetab<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>                        <span style="color:#000;font-weight:bold">continue</span> outer_loop<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">while</span> <span style="color:#000;font-weight:bold">(</span>htab<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">&gt;=</span> 0<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            output<span style="color:#000;font-weight:bold">(</span>ent<span style="color:#000;font-weight:bold">,</span> outs<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            ent <span style="color:#000;font-weight:bold">=</span> c<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>free_ent <span style="color:#000;font-weight:bold">&lt;</span> maxmaxcode<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                codetab<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> free_ent<span style="color:#000;font-weight:bold">++;</span> <span style="color:#998;font-style:italic">// code -&gt; hashtable    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                htab<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> fcode<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">else</span>    
</span></span><span style="display:flex;"><span>                cl_block<span style="color:#000;font-weight:bold">(</span>outs<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// Put out the final code.    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        output<span style="color:#000;font-weight:bold">(</span>ent<span style="color:#000;font-weight:bold">,</span> outs<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        output<span style="color:#000;font-weight:bold">(</span>EOFCode<span style="color:#000;font-weight:bold">,</span> outs<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">// ----------------------------------------------------------------------------    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">encode</span><span style="color:#000;font-weight:bold">(</span>OutputStream os<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">throws</span> IOException    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        os<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">write</span><span style="color:#000;font-weight:bold">(</span>initCodeSize<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// write &#34;initial code size&#34; byte    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>        remaining <span style="color:#000;font-weight:bold">=</span> imgW <span style="color:#000;font-weight:bold">*</span> imgH<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// reset navigation variables    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        curPixel <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        compress<span style="color:#000;font-weight:bold">(</span>initCodeSize <span style="color:#000;font-weight:bold">+</span> 1<span style="color:#000;font-weight:bold">,</span> os<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// compress and write the pixel data    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>        os<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">write</span><span style="color:#000;font-weight:bold">(</span>0<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// write block terminator    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">// Flush the packet to disk, and reset the accumulator    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">flush_char</span><span style="color:#000;font-weight:bold">(</span>OutputStream outs<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">throws</span> IOException    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>a_count <span style="color:#000;font-weight:bold">&gt;</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            outs<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">write</span><span style="color:#000;font-weight:bold">(</span>a_count<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            outs<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">write</span><span style="color:#000;font-weight:bold">(</span>accum<span style="color:#000;font-weight:bold">,</span> 0<span style="color:#000;font-weight:bold">,</span> a_count<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            a_count <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> <span style="color:#900;font-weight:bold">MAXCODE</span><span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> n_bits<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> <span style="color:#000;font-weight:bold">(</span>1 <span style="color:#000;font-weight:bold">&lt;&lt;</span> n_bits<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">-</span> 1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">// ----------------------------------------------------------------------------    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// Return the next pixel from the image    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#998;font-style:italic">// ----------------------------------------------------------------------------    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">private</span> <span style="color:#458;font-weight:bold">int</span> <span style="color:#900;font-weight:bold">nextPixel</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>remaining <span style="color:#000;font-weight:bold">==</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">return</span> EOF<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">--</span>remaining<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">byte</span> pix <span style="color:#000;font-weight:bold">=</span> pixAry<span style="color:#000;font-weight:bold">[</span>curPixel<span style="color:#000;font-weight:bold">++];</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> pix <span style="color:#000;font-weight:bold">&amp;</span> 0xff<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">output</span><span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> code<span style="color:#000;font-weight:bold">,</span> OutputStream outs<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">throws</span> IOException    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        cur_accum <span style="color:#000;font-weight:bold">&amp;=</span> masks<span style="color:#000;font-weight:bold">[</span>cur_bits<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>cur_bits <span style="color:#000;font-weight:bold">&gt;</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            cur_accum <span style="color:#000;font-weight:bold">|=</span> <span style="color:#000;font-weight:bold">(</span>code <span style="color:#000;font-weight:bold">&lt;&lt;</span> cur_bits<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">else</span>    
</span></span><span style="display:flex;"><span>            cur_accum <span style="color:#000;font-weight:bold">=</span> code<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        cur_bits <span style="color:#000;font-weight:bold">+=</span> n_bits<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">while</span> <span style="color:#000;font-weight:bold">(</span>cur_bits <span style="color:#000;font-weight:bold">&gt;=</span> 8<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            char_out<span style="color:#000;font-weight:bold">((</span><span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">(</span>cur_accum <span style="color:#000;font-weight:bold">&amp;</span> 0xff<span style="color:#000;font-weight:bold">),</span> outs<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            cur_accum <span style="color:#000;font-weight:bold">&gt;&gt;=</span> 8<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            cur_bits <span style="color:#000;font-weight:bold">-=</span> 8<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// If the next entry is going to be too big for the code size,    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#998;font-style:italic">// then increase it, if possible.    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>free_ent <span style="color:#000;font-weight:bold">&gt;</span> maxcode <span style="color:#000;font-weight:bold">||</span> clear_flg<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>clear_flg<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                maxcode <span style="color:#000;font-weight:bold">=</span> MAXCODE<span style="color:#000;font-weight:bold">(</span>n_bits <span style="color:#000;font-weight:bold">=</span> g_init_bits<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>                clear_flg <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">false</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">else</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">++</span>n_bits<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>n_bits <span style="color:#000;font-weight:bold">==</span> maxbits<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                    maxcode <span style="color:#000;font-weight:bold">=</span> maxmaxcode<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">else</span>    
</span></span><span style="display:flex;"><span>                    maxcode <span style="color:#000;font-weight:bold">=</span> MAXCODE<span style="color:#000;font-weight:bold">(</span>n_bits<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>code <span style="color:#000;font-weight:bold">==</span> EOFCode<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#998;font-style:italic">// At EOF, write the rest of the buffer.    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>            <span style="color:#000;font-weight:bold">while</span> <span style="color:#000;font-weight:bold">(</span>cur_bits <span style="color:#000;font-weight:bold">&gt;</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                char_out<span style="color:#000;font-weight:bold">((</span><span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">(</span>cur_accum <span style="color:#000;font-weight:bold">&amp;</span> 0xff<span style="color:#000;font-weight:bold">),</span> outs<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>                cur_accum <span style="color:#000;font-weight:bold">&gt;&gt;=</span> 8<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                cur_bits <span style="color:#000;font-weight:bold">-=</span> 8<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>            flush_char<span style="color:#000;font-weight:bold">(</span>outs<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span>  
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="232-gifdecoder">2.3.2 GifDecoder</h3>
<div class="highlight"><div style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  1
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  2
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  3
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  4
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  5
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  6
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  7
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  8
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  9
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 10
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 11
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 12
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 13
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 14
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 15
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 16
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 17
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 18
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 19
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 20
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 21
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 22
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 23
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 24
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 25
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 26
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 27
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 28
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 29
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 30
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 31
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 32
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 33
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 34
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 35
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 36
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 37
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 38
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 39
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 40
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 41
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 42
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 43
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 44
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 45
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 46
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 47
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 48
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 49
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 50
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 51
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 52
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 53
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 54
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 55
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 56
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 57
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 58
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 59
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 60
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 61
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 62
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 63
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 64
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 65
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 66
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 67
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 68
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 69
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 70
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 71
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 72
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 73
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 74
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 75
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 76
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 77
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 78
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 79
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 80
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 81
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 82
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 83
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 84
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 85
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 86
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 87
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 88
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 89
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 90
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 91
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 92
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 93
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 94
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 95
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 96
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 97
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 98
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 99
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">100
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">101
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">102
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">103
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">104
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">105
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">106
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">107
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">108
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">109
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">110
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">111
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">112
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">113
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">114
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">115
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">116
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">117
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">118
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">119
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">120
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">121
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">122
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">123
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">124
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">125
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">126
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">127
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">128
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">129
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">130
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">131
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">132
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">133
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">134
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">135
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">136
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">137
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">138
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">139
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">140
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">141
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">142
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">143
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">144
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">145
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">146
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">147
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">148
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">149
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">150
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">151
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">152
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">153
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">154
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">155
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">156
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">157
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">158
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">159
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">160
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">161
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">162
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">163
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">164
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">165
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">166
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">167
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">168
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">169
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">170
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">171
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">172
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">173
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">174
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">175
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">176
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">177
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">178
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">179
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">180
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">181
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">182
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">183
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">184
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">185
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">186
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">187
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">188
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">189
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">190
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">191
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">192
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">193
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">194
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">195
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">196
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">197
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">198
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">199
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">200
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">201
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">202
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">203
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">204
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">205
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">206
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">207
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">208
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">209
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">210
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">211
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">212
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">213
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">214
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">215
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">216
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">217
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">218
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">219
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">220
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">221
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">222
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">223
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">224
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">225
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">226
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">227
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">228
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">229
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">230
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">231
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">232
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">233
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">234
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">235
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">236
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">237
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">238
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">239
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">240
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">241
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">242
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">243
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">244
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">245
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">246
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">247
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">248
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">249
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">250
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">251
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">252
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">253
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">254
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">255
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">256
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">257
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">258
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">259
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">260
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">261
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">262
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">263
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">264
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">265
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">266
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">267
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">268
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">269
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">270
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">271
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">272
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">273
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">274
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">275
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">276
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">277
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">278
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">279
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">280
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">281
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">282
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">283
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">284
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">285
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">286
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">287
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">288
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">289
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">290
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">291
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">292
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">293
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">294
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">295
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">296
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">297
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">298
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">299
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">300
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">301
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">302
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">303
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">304
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">305
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">306
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">307
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">308
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">309
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">310
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">311
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">312
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">313
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">314
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">315
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">316
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">317
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">318
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">319
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">320
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">321
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">322
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">323
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">324
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">325
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">326
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">327
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">328
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">329
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">330
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">331
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">332
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">333
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">334
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">335
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">336
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">337
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">338
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">339
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">340
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">341
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">342
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">343
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">344
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">345
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">346
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">347
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">348
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">349
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">350
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">351
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">352
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">353
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">354
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">355
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">356
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">357
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">358
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">359
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">360
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">361
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">362
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">363
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">364
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">365
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">366
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">367
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">368
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">369
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">370
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">371
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">372
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">373
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">374
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">375
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">376
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">377
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">378
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">379
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">380
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">381
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">382
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">383
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">384
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">385
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">386
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">387
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">388
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">389
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">390
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">391
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">392
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">393
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">394
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">395
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">396
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">397
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">398
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">399
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">400
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">401
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">402
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">403
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">404
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">405
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">406
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">407
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">408
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">409
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">410
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">411
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">412
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">413
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">414
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">415
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">416
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">417
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">418
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">419
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">420
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">421
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">422
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">423
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">424
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">425
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">426
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">427
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">428
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">429
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">430
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">431
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">432
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">433
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">434
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">435
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">436
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">437
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">438
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">439
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">440
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">441
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">442
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">443
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">444
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">445
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">446
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">447
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">448
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">449
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">450
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">451
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">452
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">453
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">454
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">455
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">456
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">457
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">458
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">459
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">460
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">461
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">462
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">463
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">464
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">465
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">466
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">467
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">468
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">469
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">470
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">471
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">472
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">473
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">474
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">475
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">476
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">477
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">478
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">479
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">480
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">481
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">482
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">483
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">484
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">485
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">486
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">487
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">488
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">489
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">490
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">491
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">492
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">493
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">494
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">495
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">496
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">497
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">498
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">499
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">500
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">501
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">502
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">503
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">504
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">505
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">506
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">507
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">508
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">509
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">510
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">511
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">512
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">513
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">514
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">515
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">516
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">517
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">518
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">519
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">520
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">521
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">522
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">523
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">524
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">525
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">526
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">527
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">528
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">529
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">530
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">531
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">532
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">533
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">534
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">535
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">536
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">537
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">538
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">539
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">540
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">541
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">542
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">543
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">544
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">545
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">546
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">547
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">548
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">549
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">550
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">551
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">552
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">553
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">554
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">555
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">556
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">557
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">558
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">559
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">560
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">561
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">562
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">563
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">564
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">565
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">566
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">567
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">568
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">569
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">570
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">571
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">572
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">573
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">574
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">575
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">576
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">577
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">578
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">579
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">580
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">581
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">582
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">583
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">584
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">585
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">586
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">587
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">588
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">589
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">590
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">591
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">592
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">593
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">594
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">595
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">596
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">597
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">598
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">599
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">600
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">601
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">602
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">603
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">604
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">605
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">606
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">607
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">608
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">609
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">610
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">611
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">612
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">613
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">614
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">615
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">616
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">617
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">618
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">619
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">620
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">621
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">622
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">623
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">624
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">625
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">626
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">627
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">628
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">629
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">630
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">631
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">632
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">633
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">634
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">635
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">636
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">637
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">638
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">639
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">640
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">641
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">642
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">643
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">644
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">645
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">646
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">647
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">648
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">649
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">650
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">651
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">652
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">653
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">654
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">655
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">656
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">657
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">658
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">659
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">660
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">661
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">662
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">663
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">664
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">665
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">666
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">667
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">668
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">669
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">670
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">671
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">672
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">673
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">674
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">675
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">676
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">677
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">678
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">679
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">680
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">681
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">682
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">683
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">684
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">685
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">686
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">687
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">688
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">689
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">690
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">691
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">692
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">693
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">694
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">695
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">696
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">697
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">698
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">699
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">700
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">701
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">702
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">703
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">704
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">705
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">706
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">707
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">708
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">709
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">710
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">711
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">712
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">713
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">714
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">715
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">716
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">717
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">718
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">719
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">720
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">721
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">722
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">723
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">724
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">725
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">726
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">727
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">728
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">729
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">730
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">731
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">732
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">733
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">734
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">735
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">736
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">737
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">738
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">739
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">740
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">741
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">742
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">743
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">744
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">745
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">746
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">747
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">748
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">749
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">750
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">751
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">752
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">753
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">754
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">755
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">756
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">757
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">758
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">759
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">760
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">761
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">762
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">763
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">764
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">765
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">766
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">767
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">768
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">769
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">770
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">771
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">772
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">773
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">774
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">775
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">776
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">777
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">778
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">779
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">780
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">781
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">782
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">783
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">784
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">785
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">786
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">787
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">788
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">789
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">790
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">791
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">792
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">793
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">794
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">795
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">796
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">797
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">798
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">799
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">800
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">801
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">802
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">803
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">804
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">805
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">806
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">807
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">808
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">809
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">810
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">811
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">812
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">813
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">814
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">815
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">816
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">817
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">818
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">819
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">820
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">821
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">822
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">823
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">824
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">825
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">826
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">827
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">828
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">829
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">830
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">831
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">832
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">833
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">834
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">835
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">836
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">837
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">838
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">839
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">840
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">841
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">842
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">843
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">844
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">845
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">846
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">847
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">848
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">849
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">850
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">851
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">852
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">853
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">854
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">855
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">856
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">857
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">858
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">859
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">860
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">861
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">862
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">863
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">864
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">865
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">866
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">867
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">868
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">869
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">870
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">871
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">872
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">873
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">874
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">875
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">876
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">877
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">878
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">879
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">880
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">881
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">882
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">883
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">884
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">885
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">886
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">887
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">888
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">889
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">890
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">891
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">892
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">893
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">894
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#000;font-weight:bold">package</span> <span style="color:#555">com.test.test</span><span style="color:#000;font-weight:bold">;</span>  
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.awt.*</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.awt.image.BufferedImage</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.awt.image.DataBufferInt</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.io.BufferedInputStream</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.io.FileInputStream</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.io.IOException</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.io.InputStream</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.net.URL</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.util.ArrayList</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> * &lt;p&gt;  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> * &lt;/p&gt;  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> *  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> * @author: wuhongjun  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> * @version:1.0  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> */</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">public</span> <span style="color:#000;font-weight:bold">class</span> <span style="color:#458;font-weight:bold">GifDecoder</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * File read status: No errors.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> STATUS_OK <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * File read status: Error decoding file (may be partially decoded)  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> STATUS_FORMAT_ERROR <span style="color:#000;font-weight:bold">=</span> 1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * File read status: Unable to open source.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> STATUS_OPEN_ERROR <span style="color:#000;font-weight:bold">=</span> 2<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> BufferedInputStream in<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> status<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> width<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// full image width    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> height<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// full image height    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">boolean</span> gctFlag<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// global color table used    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> gctSize<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// size of global color table    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> loopCount <span style="color:#000;font-weight:bold">=</span> 1<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// iterations; 0 = repeat forever    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[]</span> gct<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// global color table    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[]</span> lct<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// local color table    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[]</span> act<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// active color table    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> bgIndex<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// background color index    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> bgColor<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// background color    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> lastBgColor<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// previous bg color    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> pixelAspect<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// pixel aspect ratio    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">boolean</span> lctFlag<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// local color table flag    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">boolean</span> interlace<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// interlace flag    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> lctSize<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// local color table size    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> ix<span style="color:#000;font-weight:bold">,</span> iy<span style="color:#000;font-weight:bold">,</span> iw<span style="color:#000;font-weight:bold">,</span> ih<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// current image rectangle    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> Rectangle lastRect<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// last image rect    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> BufferedImage image<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// current frame    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> BufferedImage lastImage<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// previous frame    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">[]</span> block <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> <span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">[</span>256<span style="color:#000;font-weight:bold">];</span> <span style="color:#998;font-style:italic">// current data block    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> blockSize <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// block size    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">// last graphic control extension info    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> dispose <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">// 0=no action; 1=leave in place; 2=restore to bg; 3=restore to prev    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> lastDispose <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">boolean</span> transparency <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">false</span><span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// use transparent color    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> delay <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// delay in milliseconds    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> transIndex<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// transparent color index    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> MaxStackSize <span style="color:#000;font-weight:bold">=</span> 4096<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">// max decoder pixel stack size    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">// LZW decoder working arrays    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">short</span><span style="color:#000;font-weight:bold">[]</span> prefix<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">[]</span> suffix<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">[]</span> pixelStack<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">[]</span> pixels<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> ArrayList<span style="color:#000;font-weight:bold">&lt;</span>GifFrame<span style="color:#000;font-weight:bold">&gt;</span> frames<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// frames read from current file    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> frameCount<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">class</span> <span style="color:#458;font-weight:bold">GifFrame</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">public</span> <span style="color:#900;font-weight:bold">GifFrame</span><span style="color:#000;font-weight:bold">(</span>BufferedImage im<span style="color:#000;font-weight:bold">,</span> <span style="color:#458;font-weight:bold">int</span> del<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            image <span style="color:#000;font-weight:bold">=</span> im<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            delay <span style="color:#000;font-weight:bold">=</span> del<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">public</span> BufferedImage image<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">public</span> <span style="color:#458;font-weight:bold">int</span> delay<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Gets display duration for specified frame.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param n  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *            int index of frame  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @return delay in milliseconds  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#458;font-weight:bold">int</span> <span style="color:#900;font-weight:bold">getDelay</span><span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> n<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">//    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        delay <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">-</span>1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">((</span>n <span style="color:#000;font-weight:bold">&gt;=</span> 0<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">&amp;&amp;</span> <span style="color:#000;font-weight:bold">(</span>n <span style="color:#000;font-weight:bold">&lt;</span> frameCount<span style="color:#000;font-weight:bold">))</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            delay <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span>frames<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">get</span><span style="color:#000;font-weight:bold">(</span>n<span style="color:#000;font-weight:bold">)).</span><span style="color:#008080">delay</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> delay<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Gets the number of frames read from file.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *   
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @return frame count  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#458;font-weight:bold">int</span> <span style="color:#900;font-weight:bold">getFrameCount</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> frameCount<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Gets the first (or only) image read.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @return BufferedImage containing first frame, or null if none.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> BufferedImage <span style="color:#900;font-weight:bold">getImage</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> getFrame<span style="color:#000;font-weight:bold">(</span>0<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Gets the &#34;Netscape&#34; iteration count, if any.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * A count of 0 means repeat indefinitiely.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @return iteration count if one was specified, else 1.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#458;font-weight:bold">int</span> <span style="color:#900;font-weight:bold">getLoopCount</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> loopCount<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Creates new frame image from current data (and previous  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * frames as specified by their disposition codes).  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">setPixels</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// expose destination image&#39;s pixels as int array    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[]</span> dest <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">((</span>DataBufferInt<span style="color:#000;font-weight:bold">)</span> image<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">getRaster</span><span style="color:#000;font-weight:bold">().</span><span style="color:#008080">getDataBuffer</span><span style="color:#000;font-weight:bold">()).</span><span style="color:#008080">getData</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// fill in starting image contents based on last image&#39;s dispose code    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>lastDispose <span style="color:#000;font-weight:bold">&gt;</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>lastDispose <span style="color:#000;font-weight:bold">==</span> 3<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#998;font-style:italic">// use image before last    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                <span style="color:#458;font-weight:bold">int</span> n <span style="color:#000;font-weight:bold">=</span> frameCount <span style="color:#000;font-weight:bold">-</span> 2<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>n <span style="color:#000;font-weight:bold">&gt;</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                    lastImage <span style="color:#000;font-weight:bold">=</span> getFrame<span style="color:#000;font-weight:bold">(</span>n <span style="color:#000;font-weight:bold">-</span> 1<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">else</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                    lastImage <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">null</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>lastImage <span style="color:#000;font-weight:bold">!=</span> <span style="color:#000;font-weight:bold">null</span><span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[]</span> prev <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">((</span>DataBufferInt<span style="color:#000;font-weight:bold">)</span> lastImage<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">getRaster</span><span style="color:#000;font-weight:bold">().</span><span style="color:#008080">getDataBuffer</span><span style="color:#000;font-weight:bold">()).</span><span style="color:#008080">getData</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>                System<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">arraycopy</span><span style="color:#000;font-weight:bold">(</span>prev<span style="color:#000;font-weight:bold">,</span> 0<span style="color:#000;font-weight:bold">,</span> dest<span style="color:#000;font-weight:bold">,</span> 0<span style="color:#000;font-weight:bold">,</span> width <span style="color:#000;font-weight:bold">*</span> height<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#998;font-style:italic">// copy pixels    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>lastDispose <span style="color:#000;font-weight:bold">==</span> 2<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#998;font-style:italic">// fill last image rect area with background color    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                    Graphics2D g <span style="color:#000;font-weight:bold">=</span> image<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">createGraphics</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>                    Color c <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">null</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>transparency<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                        c <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> Color<span style="color:#000;font-weight:bold">(</span>0<span style="color:#000;font-weight:bold">,</span> 0<span style="color:#000;font-weight:bold">,</span> 0<span style="color:#000;font-weight:bold">,</span> 0<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// assume background is transparent    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">else</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                        c <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> Color<span style="color:#000;font-weight:bold">(</span>lastBgColor<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// use given background color    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>                    g<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">setColor</span><span style="color:#000;font-weight:bold">(</span>c<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>                    g<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">setComposite</span><span style="color:#000;font-weight:bold">(</span>AlphaComposite<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">Src</span><span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// replace area    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                    g<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">fill</span><span style="color:#000;font-weight:bold">(</span>lastRect<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>                    g<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">dispose</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// copy each source line to the appropriate place in the destination    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#458;font-weight:bold">int</span> pass <span style="color:#000;font-weight:bold">=</span> 1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> inc <span style="color:#000;font-weight:bold">=</span> 8<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> iline <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> i <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> i <span style="color:#000;font-weight:bold">&lt;</span> ih<span style="color:#000;font-weight:bold">;</span> i<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#458;font-weight:bold">int</span> line <span style="color:#000;font-weight:bold">=</span> i<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>interlace<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>iline <span style="color:#000;font-weight:bold">&gt;=</span> ih<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                    pass<span style="color:#000;font-weight:bold">++;</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">switch</span> <span style="color:#000;font-weight:bold">(</span>pass<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">case</span> 2<span style="color:#000;font-weight:bold">:</span>    
</span></span><span style="display:flex;"><span>                        iline <span style="color:#000;font-weight:bold">=</span> 4<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                        <span style="color:#000;font-weight:bold">break</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">case</span> 3<span style="color:#000;font-weight:bold">:</span>    
</span></span><span style="display:flex;"><span>                        iline <span style="color:#000;font-weight:bold">=</span> 2<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                        inc <span style="color:#000;font-weight:bold">=</span> 4<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                        <span style="color:#000;font-weight:bold">break</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">case</span> 4<span style="color:#000;font-weight:bold">:</span>    
</span></span><span style="display:flex;"><span>                        iline <span style="color:#000;font-weight:bold">=</span> 1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                        inc <span style="color:#000;font-weight:bold">=</span> 2<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>                line <span style="color:#000;font-weight:bold">=</span> iline<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                iline <span style="color:#000;font-weight:bold">+=</span> inc<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            line <span style="color:#000;font-weight:bold">+=</span> iy<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>line <span style="color:#000;font-weight:bold">&lt;</span> height<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#458;font-weight:bold">int</span> k <span style="color:#000;font-weight:bold">=</span> line <span style="color:#000;font-weight:bold">*</span> width<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#458;font-weight:bold">int</span> dx <span style="color:#000;font-weight:bold">=</span> k <span style="color:#000;font-weight:bold">+</span> ix<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// start of line in dest    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                <span style="color:#458;font-weight:bold">int</span> dlim <span style="color:#000;font-weight:bold">=</span> dx <span style="color:#000;font-weight:bold">+</span> iw<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// end of dest line    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">((</span>k <span style="color:#000;font-weight:bold">+</span> width<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">&lt;</span> dlim<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                    dlim <span style="color:#000;font-weight:bold">=</span> k <span style="color:#000;font-weight:bold">+</span> width<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// past dest edge    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#458;font-weight:bold">int</span> sx <span style="color:#000;font-weight:bold">=</span> i <span style="color:#000;font-weight:bold">*</span> iw<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// start of line in source    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                <span style="color:#000;font-weight:bold">while</span> <span style="color:#000;font-weight:bold">(</span>dx <span style="color:#000;font-weight:bold">&lt;</span> dlim<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#998;font-style:italic">// map color and insert in destination    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                    <span style="color:#458;font-weight:bold">int</span> index <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">((</span><span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">)</span> pixels<span style="color:#000;font-weight:bold">[</span>sx<span style="color:#000;font-weight:bold">++])</span> <span style="color:#000;font-weight:bold">&amp;</span> 0xff<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#458;font-weight:bold">int</span> c <span style="color:#000;font-weight:bold">=</span> act<span style="color:#000;font-weight:bold">[</span>index<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>c <span style="color:#000;font-weight:bold">!=</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                        dest<span style="color:#000;font-weight:bold">[</span>dx<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> c<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>                    dx<span style="color:#000;font-weight:bold">++;</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Gets the image contents of frame n.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @return BufferedImage representation of frame, or null if n is invalid.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> BufferedImage <span style="color:#900;font-weight:bold">getFrame</span><span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> n<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        BufferedImage im <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">null</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">((</span>n <span style="color:#000;font-weight:bold">&gt;=</span> 0<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">&amp;&amp;</span> <span style="color:#000;font-weight:bold">(</span>n <span style="color:#000;font-weight:bold">&lt;</span> frameCount<span style="color:#000;font-weight:bold">))</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            im <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span>frames<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">get</span><span style="color:#000;font-weight:bold">(</span>n<span style="color:#000;font-weight:bold">)).</span><span style="color:#008080">image</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> im<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Gets image size.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @return GIF image dimensions  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> Dimension <span style="color:#900;font-weight:bold">getFrameSize</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> <span style="color:#000;font-weight:bold">new</span> Dimension<span style="color:#000;font-weight:bold">(</span>width<span style="color:#000;font-weight:bold">,</span> height<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Reads GIF image from stream  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param is  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *            BufferedInputStream containing GIF file.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @return read status code (0 = no errors)  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#458;font-weight:bold">int</span> <span style="color:#900;font-weight:bold">read</span><span style="color:#000;font-weight:bold">(</span>BufferedInputStream is<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        init<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">try</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>is <span style="color:#000;font-weight:bold">!=</span> <span style="color:#000;font-weight:bold">null</span><span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                in <span style="color:#000;font-weight:bold">=</span> is<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                readHeader<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(!</span>err<span style="color:#000;font-weight:bold">())</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                    readContents<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>frameCount <span style="color:#000;font-weight:bold">&lt;</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                        status <span style="color:#000;font-weight:bold">=</span> STATUS_FORMAT_ERROR<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">else</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                status <span style="color:#000;font-weight:bold">=</span> STATUS_OPEN_ERROR<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">finally</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#000;font-weight:bold">null</span> <span style="color:#000;font-weight:bold">!=</span> is<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">try</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                    is<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">close</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">catch</span> <span style="color:#000;font-weight:bold">(</span>IOException e<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                    e<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">printStackTrace</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> status<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Reads GIF image from stream  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param is  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *            InputStream containing GIF file.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @return read status code (0 = no errors)  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#458;font-weight:bold">int</span> <span style="color:#900;font-weight:bold">read</span><span style="color:#000;font-weight:bold">(</span>InputStream is<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        init<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">try</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>is <span style="color:#000;font-weight:bold">!=</span> <span style="color:#000;font-weight:bold">null</span><span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(!(</span>is <span style="color:#000;font-weight:bold">instanceof</span> BufferedInputStream<span style="color:#000;font-weight:bold">))</span>    
</span></span><span style="display:flex;"><span>                    is <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> BufferedInputStream<span style="color:#000;font-weight:bold">(</span>is<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>                in <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span>BufferedInputStream<span style="color:#000;font-weight:bold">)</span> is<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                readHeader<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(!</span>err<span style="color:#000;font-weight:bold">())</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                    readContents<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>frameCount <span style="color:#000;font-weight:bold">&lt;</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                        status <span style="color:#000;font-weight:bold">=</span> STATUS_FORMAT_ERROR<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">else</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                status <span style="color:#000;font-weight:bold">=</span> STATUS_OPEN_ERROR<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">finally</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#000;font-weight:bold">null</span> <span style="color:#000;font-weight:bold">!=</span> is<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">try</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                    is<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">close</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">catch</span> <span style="color:#000;font-weight:bold">(</span>IOException e<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                    e<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">printStackTrace</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> status<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Reads GIF file from specified file/URL source  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * (URL assumed if name contains &#34;:/&#34; or &#34;file:&#34;)  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param name  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *            String containing source  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @return read status code (0 = no errors)  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#458;font-weight:bold">int</span> <span style="color:#900;font-weight:bold">read</span><span style="color:#000;font-weight:bold">(</span>String name<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        status <span style="color:#000;font-weight:bold">=</span> STATUS_OK<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">try</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            name <span style="color:#000;font-weight:bold">=</span> name<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">trim</span><span style="color:#000;font-weight:bold">().</span><span style="color:#008080">toLowerCase</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">((</span>name<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">contains</span><span style="color:#000;font-weight:bold">(</span><span style="color:#d14">&#34;file:&#34;</span><span style="color:#000;font-weight:bold">))</span> <span style="color:#000;font-weight:bold">||</span> <span style="color:#000;font-weight:bold">(</span>name<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">indexOf</span><span style="color:#000;font-weight:bold">(</span><span style="color:#d14">&#34;:/&#34;</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">&gt;</span> 0<span style="color:#000;font-weight:bold">))</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                URL url <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> URL<span style="color:#000;font-weight:bold">(</span>name<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>                in <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> BufferedInputStream<span style="color:#000;font-weight:bold">(</span>url<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">openStream</span><span style="color:#000;font-weight:bold">());</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">else</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                in <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> BufferedInputStream<span style="color:#000;font-weight:bold">(</span><span style="color:#000;font-weight:bold">new</span> FileInputStream<span style="color:#000;font-weight:bold">(</span>name<span style="color:#000;font-weight:bold">));</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            status <span style="color:#000;font-weight:bold">=</span> read<span style="color:#000;font-weight:bold">(</span>in<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">catch</span> <span style="color:#000;font-weight:bold">(</span>IOException e<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            status <span style="color:#000;font-weight:bold">=</span> STATUS_OPEN_ERROR<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> status<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Decodes LZW image data into pixel array.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Adapted from John Cristy&#39;s ImageMagick.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">decodeImageData</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> NullCode <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">-</span>1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> npix <span style="color:#000;font-weight:bold">=</span> iw <span style="color:#000;font-weight:bold">*</span> ih<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> available<span style="color:#000;font-weight:bold">,</span> clear<span style="color:#000;font-weight:bold">,</span> code_mask<span style="color:#000;font-weight:bold">,</span> code_size<span style="color:#000;font-weight:bold">,</span> end_of_information<span style="color:#000;font-weight:bold">,</span> in_code<span style="color:#000;font-weight:bold">,</span> old_code<span style="color:#000;font-weight:bold">,</span> bits<span style="color:#000;font-weight:bold">,</span> code<span style="color:#000;font-weight:bold">,</span> count<span style="color:#000;font-weight:bold">,</span> i<span style="color:#000;font-weight:bold">,</span> datum<span style="color:#000;font-weight:bold">,</span> data_size<span style="color:#000;font-weight:bold">,</span> first<span style="color:#000;font-weight:bold">,</span> top<span style="color:#000;font-weight:bold">,</span> bi<span style="color:#000;font-weight:bold">,</span> pi<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">((</span>pixels <span style="color:#000;font-weight:bold">==</span> <span style="color:#000;font-weight:bold">null</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">||</span> <span style="color:#000;font-weight:bold">(</span>pixels<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">length</span> <span style="color:#000;font-weight:bold">&lt;</span> npix<span style="color:#000;font-weight:bold">))</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            pixels <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> <span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">[</span>npix<span style="color:#000;font-weight:bold">];</span> <span style="color:#998;font-style:italic">// allocate new pixel array    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>prefix <span style="color:#000;font-weight:bold">==</span> <span style="color:#000;font-weight:bold">null</span><span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            prefix <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> <span style="color:#458;font-weight:bold">short</span><span style="color:#000;font-weight:bold">[</span>MaxStackSize<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>suffix <span style="color:#000;font-weight:bold">==</span> <span style="color:#000;font-weight:bold">null</span><span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            suffix <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> <span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">[</span>MaxStackSize<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>pixelStack <span style="color:#000;font-weight:bold">==</span> <span style="color:#000;font-weight:bold">null</span><span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            pixelStack <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> <span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">[</span>MaxStackSize <span style="color:#000;font-weight:bold">+</span> 1<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// Initialize GIF data stream decoder.    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>        data_size <span style="color:#000;font-weight:bold">=</span> read<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        clear <span style="color:#000;font-weight:bold">=</span> 1 <span style="color:#000;font-weight:bold">&lt;&lt;</span> data_size<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        end_of_information <span style="color:#000;font-weight:bold">=</span> clear <span style="color:#000;font-weight:bold">+</span> 1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        available <span style="color:#000;font-weight:bold">=</span> clear <span style="color:#000;font-weight:bold">+</span> 2<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        old_code <span style="color:#000;font-weight:bold">=</span> NullCode<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        code_size <span style="color:#000;font-weight:bold">=</span> data_size <span style="color:#000;font-weight:bold">+</span> 1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        code_mask <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span>1 <span style="color:#000;font-weight:bold">&lt;&lt;</span> code_size<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">-</span> 1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span>code <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> code <span style="color:#000;font-weight:bold">&lt;</span> clear<span style="color:#000;font-weight:bold">;</span> code<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            prefix<span style="color:#000;font-weight:bold">[</span>code<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            suffix<span style="color:#000;font-weight:bold">[</span>code<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">)</span> code<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// Decode GIF pixel stream.    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>        datum <span style="color:#000;font-weight:bold">=</span> bits <span style="color:#000;font-weight:bold">=</span> count <span style="color:#000;font-weight:bold">=</span> first <span style="color:#000;font-weight:bold">=</span> top <span style="color:#000;font-weight:bold">=</span> pi <span style="color:#000;font-weight:bold">=</span> bi <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span>i <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> i <span style="color:#000;font-weight:bold">&lt;</span> npix<span style="color:#000;font-weight:bold">;)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>top <span style="color:#000;font-weight:bold">==</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>bits <span style="color:#000;font-weight:bold">&lt;</span> code_size<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#998;font-style:italic">// Load bytes until there are enough bits for a code.    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                    <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>count <span style="color:#000;font-weight:bold">==</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                        <span style="color:#998;font-style:italic">// Read a new data block.    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                        count <span style="color:#000;font-weight:bold">=</span> readBlock<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>                        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>count <span style="color:#000;font-weight:bold">&lt;=</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                            <span style="color:#000;font-weight:bold">break</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                        bi <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>                    datum <span style="color:#000;font-weight:bold">+=</span> <span style="color:#000;font-weight:bold">(((</span><span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">)</span> block<span style="color:#000;font-weight:bold">[</span>bi<span style="color:#000;font-weight:bold">])</span> <span style="color:#000;font-weight:bold">&amp;</span> 0xff<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">&lt;&lt;</span> bits<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    bits <span style="color:#000;font-weight:bold">+=</span> 8<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    bi<span style="color:#000;font-weight:bold">++;</span>    
</span></span><span style="display:flex;"><span>                    count<span style="color:#000;font-weight:bold">--;</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">continue</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>                <span style="color:#998;font-style:italic">// Get the next code.    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>                code <span style="color:#000;font-weight:bold">=</span> datum <span style="color:#000;font-weight:bold">&amp;</span> code_mask<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                datum <span style="color:#000;font-weight:bold">&gt;&gt;=</span> code_size<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                bits <span style="color:#000;font-weight:bold">-=</span> code_size<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>                <span style="color:#998;font-style:italic">// Interpret the code    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">((</span>code <span style="color:#000;font-weight:bold">&gt;</span> available<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">||</span> <span style="color:#000;font-weight:bold">(</span>code <span style="color:#000;font-weight:bold">==</span> end_of_information<span style="color:#000;font-weight:bold">))</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">break</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>code <span style="color:#000;font-weight:bold">==</span> clear<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#998;font-style:italic">// Reset decoder.    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                    code_size <span style="color:#000;font-weight:bold">=</span> data_size <span style="color:#000;font-weight:bold">+</span> 1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    code_mask <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span>1 <span style="color:#000;font-weight:bold">&lt;&lt;</span> code_size<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">-</span> 1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    available <span style="color:#000;font-weight:bold">=</span> clear <span style="color:#000;font-weight:bold">+</span> 2<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    old_code <span style="color:#000;font-weight:bold">=</span> NullCode<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">continue</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>old_code <span style="color:#000;font-weight:bold">==</span> NullCode<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                    pixelStack<span style="color:#000;font-weight:bold">[</span>top<span style="color:#000;font-weight:bold">++]</span> <span style="color:#000;font-weight:bold">=</span> suffix<span style="color:#000;font-weight:bold">[</span>code<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>                    old_code <span style="color:#000;font-weight:bold">=</span> code<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    first <span style="color:#000;font-weight:bold">=</span> code<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">continue</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>                in_code <span style="color:#000;font-weight:bold">=</span> code<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>code <span style="color:#000;font-weight:bold">==</span> available<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                    pixelStack<span style="color:#000;font-weight:bold">[</span>top<span style="color:#000;font-weight:bold">++]</span> <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">)</span> first<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    code <span style="color:#000;font-weight:bold">=</span> old_code<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">while</span> <span style="color:#000;font-weight:bold">(</span>code <span style="color:#000;font-weight:bold">&gt;</span> clear<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                    pixelStack<span style="color:#000;font-weight:bold">[</span>top<span style="color:#000;font-weight:bold">++]</span> <span style="color:#000;font-weight:bold">=</span> suffix<span style="color:#000;font-weight:bold">[</span>code<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>                    code <span style="color:#000;font-weight:bold">=</span> prefix<span style="color:#000;font-weight:bold">[</span>code<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>                first <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">((</span><span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">)</span> suffix<span style="color:#000;font-weight:bold">[</span>code<span style="color:#000;font-weight:bold">])</span> <span style="color:#000;font-weight:bold">&amp;</span> 0xff<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>                <span style="color:#998;font-style:italic">// Add a new string to the string table,    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>available <span style="color:#000;font-weight:bold">&gt;=</span> MaxStackSize<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">break</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                pixelStack<span style="color:#000;font-weight:bold">[</span>top<span style="color:#000;font-weight:bold">++]</span> <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">)</span> first<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                prefix<span style="color:#000;font-weight:bold">[</span>available<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">short</span><span style="color:#000;font-weight:bold">)</span> old_code<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                suffix<span style="color:#000;font-weight:bold">[</span>available<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">)</span> first<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                available<span style="color:#000;font-weight:bold">++;</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(((</span>available <span style="color:#000;font-weight:bold">&amp;</span> code_mask<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">==</span> 0<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">&amp;&amp;</span> <span style="color:#000;font-weight:bold">(</span>available <span style="color:#000;font-weight:bold">&lt;</span> MaxStackSize<span style="color:#000;font-weight:bold">))</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                    code_size<span style="color:#000;font-weight:bold">++;</span>    
</span></span><span style="display:flex;"><span>                    code_mask <span style="color:#000;font-weight:bold">+=</span> available<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>                old_code <span style="color:#000;font-weight:bold">=</span> in_code<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>            <span style="color:#998;font-style:italic">// Pop a pixel off the pixel stack.    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>            top<span style="color:#000;font-weight:bold">--;</span>    
</span></span><span style="display:flex;"><span>            pixels<span style="color:#000;font-weight:bold">[</span>pi<span style="color:#000;font-weight:bold">++]</span> <span style="color:#000;font-weight:bold">=</span> pixelStack<span style="color:#000;font-weight:bold">[</span>top<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>            i<span style="color:#000;font-weight:bold">++;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span>i <span style="color:#000;font-weight:bold">=</span> pi<span style="color:#000;font-weight:bold">;</span> i <span style="color:#000;font-weight:bold">&lt;</span> npix<span style="color:#000;font-weight:bold">;</span> i<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            pixels<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// clear missing pixels    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Returns true if an error was encountered during reading/decoding  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">boolean</span> <span style="color:#900;font-weight:bold">err</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> status <span style="color:#000;font-weight:bold">!=</span> STATUS_OK<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Initializes or re-initializes reader  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">init</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        status <span style="color:#000;font-weight:bold">=</span> STATUS_OK<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        frameCount <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        frames <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> ArrayList<span style="color:#000;font-weight:bold">&lt;</span>GifFrame<span style="color:#000;font-weight:bold">&gt;();</span>    
</span></span><span style="display:flex;"><span>        gct <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">null</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        lct <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">null</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Reads a single byte from the input stream.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> <span style="color:#900;font-weight:bold">read</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> curByte <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">try</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            curByte <span style="color:#000;font-weight:bold">=</span> in<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">read</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">catch</span> <span style="color:#000;font-weight:bold">(</span>IOException e<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            status <span style="color:#000;font-weight:bold">=</span> STATUS_FORMAT_ERROR<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> curByte<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Reads next variable length block from input.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @return number of bytes stored in &#34;buffer&#34;  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> <span style="color:#900;font-weight:bold">readBlock</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        blockSize <span style="color:#000;font-weight:bold">=</span> read<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> n <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>blockSize <span style="color:#000;font-weight:bold">&gt;</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">try</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#458;font-weight:bold">int</span> count <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">while</span> <span style="color:#000;font-weight:bold">(</span>n <span style="color:#000;font-weight:bold">&lt;</span> blockSize<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                    count <span style="color:#000;font-weight:bold">=</span> in<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">read</span><span style="color:#000;font-weight:bold">(</span>block<span style="color:#000;font-weight:bold">,</span> n<span style="color:#000;font-weight:bold">,</span> blockSize <span style="color:#000;font-weight:bold">-</span> n<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>count <span style="color:#000;font-weight:bold">==</span> <span style="color:#000;font-weight:bold">-</span>1<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                        <span style="color:#000;font-weight:bold">break</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    n <span style="color:#000;font-weight:bold">+=</span> count<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">catch</span> <span style="color:#000;font-weight:bold">(</span>IOException ignored<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>n <span style="color:#000;font-weight:bold">&lt;</span> blockSize<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                status <span style="color:#000;font-weight:bold">=</span> STATUS_FORMAT_ERROR<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> n<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Reads color table as 256 RGB integer values  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param ncolors  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *            int number of colors to read  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @return int array containing 256 colors (packed ARGB with full alpha)  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[]</span> <span style="color:#900;font-weight:bold">readColorTable</span><span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> ncolors<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> nbytes <span style="color:#000;font-weight:bold">=</span> 3 <span style="color:#000;font-weight:bold">*</span> ncolors<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[]</span> tab <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">null</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">[]</span> c <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> <span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">[</span>nbytes<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> n <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">try</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            n <span style="color:#000;font-weight:bold">=</span> in<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">read</span><span style="color:#000;font-weight:bold">(</span>c<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">catch</span> <span style="color:#000;font-weight:bold">(</span>IOException ignored<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>n <span style="color:#000;font-weight:bold">&lt;</span> nbytes<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            status <span style="color:#000;font-weight:bold">=</span> STATUS_FORMAT_ERROR<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">else</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            tab <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[</span>256<span style="color:#000;font-weight:bold">];</span> <span style="color:#998;font-style:italic">// max size to avoid bounds checks    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>            <span style="color:#458;font-weight:bold">int</span> i <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#458;font-weight:bold">int</span> j <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">while</span> <span style="color:#000;font-weight:bold">(</span>i <span style="color:#000;font-weight:bold">&lt;</span> ncolors<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#458;font-weight:bold">int</span> r <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">((</span><span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">)</span> c<span style="color:#000;font-weight:bold">[</span>j<span style="color:#000;font-weight:bold">++])</span> <span style="color:#000;font-weight:bold">&amp;</span> 0xff<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#458;font-weight:bold">int</span> g <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">((</span><span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">)</span> c<span style="color:#000;font-weight:bold">[</span>j<span style="color:#000;font-weight:bold">++])</span> <span style="color:#000;font-weight:bold">&amp;</span> 0xff<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#458;font-weight:bold">int</span> b <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">((</span><span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">)</span> c<span style="color:#000;font-weight:bold">[</span>j<span style="color:#000;font-weight:bold">++])</span> <span style="color:#000;font-weight:bold">&amp;</span> 0xff<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                tab<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">++]</span> <span style="color:#000;font-weight:bold">=</span> 0xff000000 <span style="color:#000;font-weight:bold">|</span> <span style="color:#000;font-weight:bold">(</span>r <span style="color:#000;font-weight:bold">&lt;&lt;</span> 16<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">|</span> <span style="color:#000;font-weight:bold">(</span>g <span style="color:#000;font-weight:bold">&lt;&lt;</span> 8<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">|</span> b<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> tab<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Main file parser. Reads GIF content blocks.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">readContents</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// read GIF file content blocks    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#458;font-weight:bold">boolean</span> done <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">false</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">while</span> <span style="color:#000;font-weight:bold">(!(</span>done <span style="color:#000;font-weight:bold">||</span> err<span style="color:#000;font-weight:bold">()))</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#458;font-weight:bold">int</span> code <span style="color:#000;font-weight:bold">=</span> read<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">switch</span> <span style="color:#000;font-weight:bold">(</span>code<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">case</span> 0x2C<span style="color:#000;font-weight:bold">:</span> <span style="color:#998;font-style:italic">// image separator    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                readImage<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">break</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">case</span> 0x21<span style="color:#000;font-weight:bold">:</span> <span style="color:#998;font-style:italic">// extension    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                code <span style="color:#000;font-weight:bold">=</span> read<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">switch</span> <span style="color:#000;font-weight:bold">(</span>code<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">case</span> 0xf9<span style="color:#000;font-weight:bold">:</span> <span style="color:#998;font-style:italic">// graphics control extension    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                    readGraphicControlExt<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">break</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">case</span> 0xff<span style="color:#000;font-weight:bold">:</span> <span style="color:#998;font-style:italic">// application extension    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                    readBlock<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>                    String app <span style="color:#000;font-weight:bold">=</span> <span style="color:#d14">&#34;&#34;</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> i <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> i <span style="color:#000;font-weight:bold">&lt;</span> 11<span style="color:#000;font-weight:bold">;</span> i<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                        app <span style="color:#000;font-weight:bold">+=</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">char</span><span style="color:#000;font-weight:bold">)</span> block<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>app<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">equals</span><span style="color:#000;font-weight:bold">(</span><span style="color:#d14">&#34;NETSCAPE2.0&#34;</span><span style="color:#000;font-weight:bold">))</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                        readNetscapeExt<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">else</span>    
</span></span><span style="display:flex;"><span>                        skip<span style="color:#000;font-weight:bold">();</span> <span style="color:#998;font-style:italic">// don&#39;t care    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                    <span style="color:#000;font-weight:bold">break</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">default</span><span style="color:#000;font-weight:bold">:</span> <span style="color:#998;font-style:italic">// uninteresting extension    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                    skip<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">break</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">case</span> 0x3b<span style="color:#000;font-weight:bold">:</span> <span style="color:#998;font-style:italic">// terminator    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                done <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">true</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">break</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">case</span> 0x00<span style="color:#000;font-weight:bold">:</span> <span style="color:#998;font-style:italic">// bad byte, but keep going and see what happens    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                <span style="color:#000;font-weight:bold">break</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">default</span><span style="color:#000;font-weight:bold">:</span>    
</span></span><span style="display:flex;"><span>                status <span style="color:#000;font-weight:bold">=</span> STATUS_FORMAT_ERROR<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Reads Graphics Control Extension values  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">readGraphicControlExt</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        read<span style="color:#000;font-weight:bold">();</span> <span style="color:#998;font-style:italic">// block size    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#458;font-weight:bold">int</span> packed <span style="color:#000;font-weight:bold">=</span> read<span style="color:#000;font-weight:bold">();</span> <span style="color:#998;font-style:italic">// packed fields    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        dispose <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span>packed <span style="color:#000;font-weight:bold">&amp;</span> 0x1c<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">&gt;&gt;</span> 2<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// disposal method    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>dispose <span style="color:#000;font-weight:bold">==</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            dispose <span style="color:#000;font-weight:bold">=</span> 1<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// elect to keep old image if discretionary    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        transparency <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span>packed <span style="color:#000;font-weight:bold">&amp;</span> 1<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">!=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        delay <span style="color:#000;font-weight:bold">=</span> readShort<span style="color:#000;font-weight:bold">()</span> <span style="color:#000;font-weight:bold">*</span> 10<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// delay in milliseconds    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        transIndex <span style="color:#000;font-weight:bold">=</span> read<span style="color:#000;font-weight:bold">();</span> <span style="color:#998;font-style:italic">// transparent color index    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        read<span style="color:#000;font-weight:bold">();</span> <span style="color:#998;font-style:italic">// block terminator    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Reads GIF file header information.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">readHeader</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        String id <span style="color:#000;font-weight:bold">=</span> <span style="color:#d14">&#34;&#34;</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> i <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> i <span style="color:#000;font-weight:bold">&lt;</span> 6<span style="color:#000;font-weight:bold">;</span> i<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            id <span style="color:#000;font-weight:bold">+=</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">char</span><span style="color:#000;font-weight:bold">)</span> read<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(!</span>id<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">startsWith</span><span style="color:#000;font-weight:bold">(</span><span style="color:#d14">&#34;GIF&#34;</span><span style="color:#000;font-weight:bold">))</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            status <span style="color:#000;font-weight:bold">=</span> STATUS_FORMAT_ERROR<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">return</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        readLSD<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>gctFlag <span style="color:#000;font-weight:bold">&amp;&amp;</span> <span style="color:#000;font-weight:bold">!</span>err<span style="color:#000;font-weight:bold">())</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            gct <span style="color:#000;font-weight:bold">=</span> readColorTable<span style="color:#000;font-weight:bold">(</span>gctSize<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            bgColor <span style="color:#000;font-weight:bold">=</span> gct<span style="color:#000;font-weight:bold">[</span>bgIndex<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Reads next frame image  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">readImage</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        ix <span style="color:#000;font-weight:bold">=</span> readShort<span style="color:#000;font-weight:bold">();</span> <span style="color:#998;font-style:italic">// (sub)image position &amp; size    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        iy <span style="color:#000;font-weight:bold">=</span> readShort<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        iw <span style="color:#000;font-weight:bold">=</span> readShort<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        ih <span style="color:#000;font-weight:bold">=</span> readShort<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> packed <span style="color:#000;font-weight:bold">=</span> read<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        lctFlag <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span>packed <span style="color:#000;font-weight:bold">&amp;</span> 0x80<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">!=</span> 0<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// 1 - local color table flag    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        interlace <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span>packed <span style="color:#000;font-weight:bold">&amp;</span> 0x40<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">!=</span> 0<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// 2 - interlace flag    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#998;font-style:italic">// 3 - sort flag    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#998;font-style:italic">// 4-5 - reserved    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        lctSize <span style="color:#000;font-weight:bold">=</span> 2 <span style="color:#000;font-weight:bold">&lt;&lt;</span> <span style="color:#000;font-weight:bold">(</span>packed <span style="color:#000;font-weight:bold">&amp;</span> 7<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// 6-8 - local color table size    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>lctFlag<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            lct <span style="color:#000;font-weight:bold">=</span> readColorTable<span style="color:#000;font-weight:bold">(</span>lctSize<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// read table    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>            act <span style="color:#000;font-weight:bold">=</span> lct<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// make local table active    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">else</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            act <span style="color:#000;font-weight:bold">=</span> gct<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// make global table active    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>bgIndex <span style="color:#000;font-weight:bold">==</span> transIndex<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                bgColor <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> save <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>transparency<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            save <span style="color:#000;font-weight:bold">=</span> act<span style="color:#000;font-weight:bold">[</span>transIndex<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>            act<span style="color:#000;font-weight:bold">[</span>transIndex<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// set transparent color if specified    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>act <span style="color:#000;font-weight:bold">==</span> <span style="color:#000;font-weight:bold">null</span><span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            status <span style="color:#000;font-weight:bold">=</span> STATUS_FORMAT_ERROR<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// no color table defined    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>err<span style="color:#000;font-weight:bold">())</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">return</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        decodeImageData<span style="color:#000;font-weight:bold">();</span> <span style="color:#998;font-style:italic">// decode pixel data    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        skip<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>err<span style="color:#000;font-weight:bold">())</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">return</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        frameCount<span style="color:#000;font-weight:bold">++;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// create new image to receive frame data    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        image <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> BufferedImage<span style="color:#000;font-weight:bold">(</span>width<span style="color:#000;font-weight:bold">,</span> height<span style="color:#000;font-weight:bold">,</span> BufferedImage<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">TYPE_INT_ARGB_PRE</span><span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        setPixels<span style="color:#000;font-weight:bold">();</span> <span style="color:#998;font-style:italic">// transfer pixel data to image    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>        frames<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">add</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000;font-weight:bold">new</span> GifFrame<span style="color:#000;font-weight:bold">(</span>image<span style="color:#000;font-weight:bold">,</span> delay<span style="color:#000;font-weight:bold">));</span> <span style="color:#998;font-style:italic">// add image to frame list    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>transparency<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            act<span style="color:#000;font-weight:bold">[</span>transIndex<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> save<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        resetFrame<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Reads Logical Screen Descriptor  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">readLSD</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// logical screen size    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        width <span style="color:#000;font-weight:bold">=</span> readShort<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        height <span style="color:#000;font-weight:bold">=</span> readShort<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// packed fields    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#458;font-weight:bold">int</span> packed <span style="color:#000;font-weight:bold">=</span> read<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        gctFlag <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span>packed <span style="color:#000;font-weight:bold">&amp;</span> 0x80<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">!=</span> 0<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// 1 : global color table flag    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#998;font-style:italic">// 2-4 : color resolution    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#998;font-style:italic">// 5 : gct sort flag    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        gctSize <span style="color:#000;font-weight:bold">=</span> 2 <span style="color:#000;font-weight:bold">&lt;&lt;</span> <span style="color:#000;font-weight:bold">(</span>packed <span style="color:#000;font-weight:bold">&amp;</span> 7<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// 6-8 : gct size    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>        bgIndex <span style="color:#000;font-weight:bold">=</span> read<span style="color:#000;font-weight:bold">();</span> <span style="color:#998;font-style:italic">// background color index    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        pixelAspect <span style="color:#000;font-weight:bold">=</span> read<span style="color:#000;font-weight:bold">();</span> <span style="color:#998;font-style:italic">// pixel aspect ratio    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Reads Netscape extenstion to obtain iteration count  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">readNetscapeExt</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">do</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            readBlock<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>block<span style="color:#000;font-weight:bold">[</span>0<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">==</span> 1<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#998;font-style:italic">// loop count sub-block    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                <span style="color:#458;font-weight:bold">int</span> b1 <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">((</span><span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">)</span> block<span style="color:#000;font-weight:bold">[</span>1<span style="color:#000;font-weight:bold">])</span> <span style="color:#000;font-weight:bold">&amp;</span> 0xff<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#458;font-weight:bold">int</span> b2 <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">((</span><span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">)</span> block<span style="color:#000;font-weight:bold">[</span>2<span style="color:#000;font-weight:bold">])</span> <span style="color:#000;font-weight:bold">&amp;</span> 0xff<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                loopCount <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span>b2 <span style="color:#000;font-weight:bold">&lt;&lt;</span> 8<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">|</span> b1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">while</span> <span style="color:#000;font-weight:bold">((</span>blockSize <span style="color:#000;font-weight:bold">&gt;</span> 0<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">&amp;&amp;</span> <span style="color:#000;font-weight:bold">!</span>err<span style="color:#000;font-weight:bold">());</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Reads next 16-bit value, LSB first  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> <span style="color:#900;font-weight:bold">readShort</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// read 16-bit value, LSB first    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#000;font-weight:bold">return</span> read<span style="color:#000;font-weight:bold">()</span> <span style="color:#000;font-weight:bold">|</span> <span style="color:#000;font-weight:bold">(</span>read<span style="color:#000;font-weight:bold">()</span> <span style="color:#000;font-weight:bold">&lt;&lt;</span> 8<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Resets frame state for reading next image.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">resetFrame</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        lastDispose <span style="color:#000;font-weight:bold">=</span> dispose<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        lastRect <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> Rectangle<span style="color:#000;font-weight:bold">(</span>ix<span style="color:#000;font-weight:bold">,</span> iy<span style="color:#000;font-weight:bold">,</span> iw<span style="color:#000;font-weight:bold">,</span> ih<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        lastImage <span style="color:#000;font-weight:bold">=</span> image<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        lastBgColor <span style="color:#000;font-weight:bold">=</span> bgColor<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> dispose <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">boolean</span> transparency <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">false</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> delay <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        lct <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">null</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Skips variable length blocks up to and including  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * next zero length block.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">skip</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">do</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            readBlock<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">while</span> <span style="color:#000;font-weight:bold">((</span>blockSize <span style="color:#000;font-weight:bold">&gt;</span> 0<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">&amp;&amp;</span> <span style="color:#000;font-weight:bold">!</span>err<span style="color:#000;font-weight:bold">());</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span>  
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="233-gifencoder">2.3.3 GifEncoder</h3>
<div class="highlight"><div style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  1
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  2
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  3
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  4
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  5
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  6
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  7
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  8
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  9
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 10
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 11
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 12
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 13
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 14
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 15
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 16
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 17
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 18
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 19
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 20
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 21
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 22
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 23
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 24
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 25
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 26
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 27
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 28
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 29
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 30
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 31
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 32
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 33
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 34
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 35
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 36
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 37
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 38
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 39
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 40
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 41
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 42
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 43
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 44
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 45
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 46
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 47
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 48
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 49
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 50
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 51
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 52
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 53
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 54
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 55
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 56
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 57
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 58
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 59
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 60
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 61
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 62
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 63
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 64
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 65
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 66
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 67
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 68
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 69
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 70
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 71
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 72
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 73
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 74
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 75
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 76
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 77
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 78
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 79
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 80
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 81
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 82
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 83
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 84
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 85
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 86
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 87
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 88
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 89
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 90
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 91
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 92
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 93
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 94
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 95
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 96
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 97
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 98
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 99
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">100
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">101
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">102
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">103
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">104
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">105
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">106
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">107
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">108
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">109
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">110
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">111
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">112
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">113
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">114
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">115
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">116
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">117
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">118
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">119
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">120
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">121
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">122
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">123
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">124
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">125
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">126
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">127
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">128
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">129
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">130
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">131
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">132
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">133
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">134
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">135
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">136
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">137
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">138
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">139
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">140
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">141
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">142
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">143
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">144
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">145
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">146
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">147
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">148
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">149
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">150
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">151
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">152
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">153
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">154
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">155
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">156
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">157
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">158
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">159
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">160
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">161
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">162
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">163
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">164
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">165
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">166
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">167
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">168
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">169
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">170
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">171
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">172
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">173
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">174
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">175
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">176
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">177
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">178
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">179
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">180
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">181
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">182
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">183
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">184
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">185
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">186
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">187
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">188
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">189
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">190
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">191
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">192
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">193
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">194
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">195
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">196
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">197
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">198
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">199
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">200
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">201
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">202
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">203
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">204
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">205
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">206
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">207
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">208
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">209
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">210
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">211
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">212
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">213
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">214
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">215
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">216
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">217
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">218
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">219
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">220
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">221
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">222
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">223
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">224
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">225
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">226
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">227
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">228
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">229
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">230
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">231
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">232
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">233
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">234
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">235
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">236
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">237
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">238
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">239
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">240
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">241
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">242
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">243
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">244
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">245
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">246
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">247
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">248
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">249
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">250
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">251
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">252
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">253
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">254
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">255
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">256
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">257
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">258
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">259
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">260
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">261
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">262
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">263
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">264
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">265
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">266
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">267
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">268
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">269
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">270
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">271
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">272
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">273
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">274
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">275
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">276
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">277
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">278
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">279
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">280
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">281
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">282
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">283
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">284
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">285
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">286
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">287
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">288
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">289
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">290
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">291
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">292
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">293
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">294
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">295
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">296
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">297
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">298
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">299
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">300
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">301
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">302
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">303
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">304
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">305
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">306
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">307
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">308
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">309
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">310
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">311
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">312
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">313
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">314
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">315
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">316
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">317
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">318
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">319
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">320
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">321
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">322
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">323
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">324
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">325
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">326
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">327
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">328
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">329
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">330
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">331
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">332
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">333
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">334
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">335
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">336
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">337
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">338
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">339
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">340
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">341
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">342
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">343
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">344
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">345
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">346
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">347
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">348
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">349
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">350
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">351
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">352
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">353
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">354
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">355
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">356
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">357
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">358
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">359
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">360
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">361
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">362
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">363
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">364
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">365
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">366
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">367
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">368
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">369
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">370
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">371
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">372
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">373
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">374
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">375
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">376
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">377
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">378
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">379
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">380
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">381
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">382
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">383
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">384
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">385
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">386
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">387
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">388
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">389
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">390
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">391
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">392
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">393
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">394
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">395
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">396
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">397
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">398
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">399
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">400
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">401
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">402
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">403
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">404
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">405
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">406
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">407
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">408
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">409
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">410
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">411
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">412
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">413
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">414
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">415
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">416
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">417
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">418
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">419
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">420
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">421
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">422
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">423
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">424
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">425
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">426
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">427
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">428
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">429
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">430
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">431
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">432
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">433
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">434
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">435
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">436
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">437
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">438
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">439
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">440
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">441
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">442
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">443
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">444
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">445
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">446
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">447
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">448
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">449
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">450
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">451
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">452
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">453
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">454
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">455
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">456
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">457
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">458
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">459
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">460
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">461
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">462
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">463
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">464
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">465
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">466
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">467
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">468
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">469
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">470
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">471
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">472
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">473
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">474
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">475
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">476
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">477
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">478
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">479
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">480
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">481
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">482
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">483
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">484
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">485
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">486
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">487
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">488
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">489
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">490
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">491
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">492
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">493
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">494
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">495
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">496
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">497
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">498
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">499
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">500
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">501
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">502
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">503
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">504
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">505
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">506
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">507
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">508
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">509
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">510
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">511
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">512
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">513
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">514
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">515
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">516
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">517
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">518
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">519
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">520
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">521
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">522
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">523
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">524
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">525
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">526
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">527
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">528
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">529
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">530
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">531
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">532
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">533
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">534
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">535
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">536
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">537
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">538
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">539
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">540
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">541
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">542
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">543
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">544
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">545
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">546
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">547
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">548
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">549
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">550
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">551
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">552
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">553
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">554
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">555
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">556
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">557
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">558
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">559
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">560
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">561
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">562
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">563
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">564
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">565
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">566
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">567
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">568
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#000;font-weight:bold">package</span> <span style="color:#555">com.test.test</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.awt.*</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.awt.image.BufferedImage</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.awt.image.DataBufferByte</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.io.BufferedOutputStream</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.io.ByteArrayOutputStream</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.io.FileOutputStream</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.io.IOException</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.io.OutputStream</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> * Class AnimatedGifEncoder - Encodes a GIF file consisting of one or  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> * more frames.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> *   
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> * &lt;pre&gt;  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> * Example:  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> *    AnimatedGifEncoder e = new AnimatedGifEncoder();  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> *    e.start(outputFileName);  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> *    e.setDelay(1000);   // 1 frame per sec  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> *    e.addFrame(image1);  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> *    e.addFrame(image2);  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> *    e.finish();  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> * &lt;/pre&gt;  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> *   
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> * No copyright asserted on the source code of this class. May be used  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> * for any purpose, however, refer to the Unisys LZW patent for restrictions  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> * on use of the associated Encoder class. Please forward any corrections  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> * to questions at fmsware.com.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> *  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> * @author wuhongjun  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> * @version 1.03 November 2003  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> */</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">public</span> <span style="color:#000;font-weight:bold">class</span> <span style="color:#458;font-weight:bold">GifEncoder</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> width<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// image size    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> height<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> Color transparent <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">null</span><span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// transparent color if given    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> transIndex<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// transparent index in color table    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> repeat <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">-</span>1<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// no repeat    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> delay <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// frame delay (hundredths)    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">boolean</span> started <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">false</span><span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// ready to output frames    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> OutputStream out<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> BufferedImage image<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// current frame    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">[]</span> pixels<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// BGR byte array from frame    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">[]</span> indexedPixels<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// converted frame indexed to palette    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> colorDepth<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// number of bit planes    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">[]</span> colorTab<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// RGB palette    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">boolean</span><span style="color:#000;font-weight:bold">[]</span> usedEntry <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> <span style="color:#458;font-weight:bold">boolean</span><span style="color:#000;font-weight:bold">[</span>256<span style="color:#000;font-weight:bold">];</span> <span style="color:#998;font-style:italic">// active palette entries    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> palSize <span style="color:#000;font-weight:bold">=</span> 7<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// color table size (bits-1)    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> dispose <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">-</span>1<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// disposal code (-1 = use default)    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">boolean</span> closeStream <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">false</span><span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// close stream when finished    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">boolean</span> firstFrame <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">true</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">boolean</span> sizeSet <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">false</span><span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// if false, get size from first frame    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> sample <span style="color:#000;font-weight:bold">=</span> 10<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// default sample interval for quantizer    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Sets the delay time between each frame, or changes it  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * for subsequent frames (applies to last frame added).  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param ms  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *            int delay time in milliseconds  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">setDelay</span><span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> ms<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        delay <span style="color:#000;font-weight:bold">=</span> Math<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">round</span><span style="color:#000;font-weight:bold">(</span>ms <span style="color:#000;font-weight:bold">/</span> 10<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">0f</span><span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Sets the GIF frame disposal code for the last added frame  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * and any subsequent frames. Default is 0 if no transparent  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * color has been set, otherwise 2.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *   
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param code  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *            int disposal code.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">setDispose</span><span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> code<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>code <span style="color:#000;font-weight:bold">&gt;=</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            dispose <span style="color:#000;font-weight:bold">=</span> code<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Sets the number of times the set of GIF frames  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * should be played. Default is 1; 0 means play  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * indefinitely. Must be invoked before the first  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * image is added.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param iter  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *            int number of iterations.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @return  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">setRepeat</span><span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> iter<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>iter <span style="color:#000;font-weight:bold">&gt;=</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            repeat <span style="color:#000;font-weight:bold">=</span> iter<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Sets the transparent color for the last added frame  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * and any subsequent frames.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Since all colors are subject to modification  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * in the quantization process, the color in the final  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * palette for each frame closest to the given color  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * becomes the transparent color for that frame.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * May be set to null to indicate no transparent color.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param c  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *            Color to be treated as transparent on display.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">setTransparent</span><span style="color:#000;font-weight:bold">(</span>Color c<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        transparent <span style="color:#000;font-weight:bold">=</span> c<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Adds next GIF frame. The frame is not written immediately, but is  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * actually deferred until the next frame is received so that timing  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * data can be inserted. Invoking &lt;code&gt;finish()&lt;/code&gt; flushes all  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * frames. If &lt;code&gt;setSize&lt;/code&gt; was not invoked, the size of the  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * first image is used for all subsequent frames.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param im  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *            BufferedImage containing frame to write.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @return true if successful.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#458;font-weight:bold">boolean</span> <span style="color:#900;font-weight:bold">addFrame</span><span style="color:#000;font-weight:bold">(</span>BufferedImage im<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">((</span>im <span style="color:#000;font-weight:bold">==</span> <span style="color:#000;font-weight:bold">null</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">||</span> <span style="color:#000;font-weight:bold">!</span>started<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">return</span> <span style="color:#000;font-weight:bold">false</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">boolean</span> ok <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">true</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">try</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(!</span>sizeSet<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#998;font-style:italic">// use first frame&#39;s size    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                setSize<span style="color:#000;font-weight:bold">(</span>im<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">getWidth</span><span style="color:#000;font-weight:bold">(),</span> im<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">getHeight</span><span style="color:#000;font-weight:bold">());</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            image <span style="color:#000;font-weight:bold">=</span> im<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            getImagePixels<span style="color:#000;font-weight:bold">();</span> <span style="color:#998;font-style:italic">// convert to correct format if necessary    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>            analyzePixels<span style="color:#000;font-weight:bold">();</span> <span style="color:#998;font-style:italic">// build color table &amp; map pixels    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>firstFrame<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                writeLSD<span style="color:#000;font-weight:bold">();</span> <span style="color:#998;font-style:italic">// logical screen descriptior    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                writePalette<span style="color:#000;font-weight:bold">();</span> <span style="color:#998;font-style:italic">// global color table    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>repeat <span style="color:#000;font-weight:bold">&gt;=</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#998;font-style:italic">// use NS app extension to indicate reps    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                    writeNetscapeExt<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            writeGraphicCtrlExt<span style="color:#000;font-weight:bold">();</span> <span style="color:#998;font-style:italic">// write graphic control extension    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>            writeImageDesc<span style="color:#000;font-weight:bold">();</span> <span style="color:#998;font-style:italic">// image descriptor    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(!</span>firstFrame<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                writePalette<span style="color:#000;font-weight:bold">();</span> <span style="color:#998;font-style:italic">// local color table    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            writePixels<span style="color:#000;font-weight:bold">();</span> <span style="color:#998;font-style:italic">// encode and write pixel data    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>            firstFrame <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">false</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">catch</span> <span style="color:#000;font-weight:bold">(</span>IOException e<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            ok <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">false</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> ok<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">// added by alvaro    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#458;font-weight:bold">boolean</span> <span style="color:#900;font-weight:bold">outFlush</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">boolean</span> ok <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">true</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">try</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            out<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">flush</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">return</span> ok<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">catch</span> <span style="color:#000;font-weight:bold">(</span>IOException e<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            ok <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">false</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> ok<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">[]</span> <span style="color:#900;font-weight:bold">getFrameByteArray</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> <span style="color:#000;font-weight:bold">((</span>ByteArrayOutputStream<span style="color:#000;font-weight:bold">)</span> out<span style="color:#000;font-weight:bold">).</span><span style="color:#008080">toByteArray</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Flushes any pending data and closes output file.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * If writing to an OutputStream, the stream is not  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * closed.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#458;font-weight:bold">boolean</span> <span style="color:#900;font-weight:bold">finish</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(!</span>started<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">return</span> <span style="color:#000;font-weight:bold">false</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">boolean</span> ok <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">true</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        started <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">false</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">try</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            out<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">write</span><span style="color:#000;font-weight:bold">(</span>0x3b<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// gif trailer    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>            out<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">flush</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>closeStream<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                out<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">close</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">catch</span> <span style="color:#000;font-weight:bold">(</span>IOException e<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            ok <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">false</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> ok<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">reset</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// reset for subsequent use    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        transIndex <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        out <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">null</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        image <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">null</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        pixels <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">null</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        indexedPixels <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">null</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        colorTab <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">null</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        closeStream <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">false</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        firstFrame <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">true</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Sets frame rate in frames per second. Equivalent to  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * &lt;code&gt;setDelay(1000/fps)&lt;/code&gt;.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param fps  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *            float frame rate (frames per second)  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">setFrameRate</span><span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">float</span> fps<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>fps <span style="color:#000;font-weight:bold">!=</span> 0f<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            delay <span style="color:#000;font-weight:bold">=</span> Math<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">round</span><span style="color:#000;font-weight:bold">(</span>100f <span style="color:#000;font-weight:bold">/</span> fps<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Sets quality of color quantization (conversion of images  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * to the maximum 256 colors allowed by the GIF specification).  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Lower values (minimum = 1) produce better colors, but slow  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * processing significantly. 10 is the default, and produces  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * good color mapping at reasonable speeds. Values greater  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * than 20 do not yield significant improvements in speed.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param quality  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *            int greater than 0.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @return  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">setQuality</span><span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> quality<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>quality <span style="color:#000;font-weight:bold">&lt;</span> 1<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            quality <span style="color:#000;font-weight:bold">=</span> 1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        sample <span style="color:#000;font-weight:bold">=</span> quality<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Sets the GIF frame size. The default size is the  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * size of the first frame added if this method is  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * not invoked.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param w  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *            int frame width.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param h  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *            int frame width.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">setSize</span><span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> w<span style="color:#000;font-weight:bold">,</span> <span style="color:#458;font-weight:bold">int</span> h<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>started <span style="color:#000;font-weight:bold">&amp;&amp;</span> <span style="color:#000;font-weight:bold">!</span>firstFrame<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">return</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        width <span style="color:#000;font-weight:bold">=</span> w<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        height <span style="color:#000;font-weight:bold">=</span> h<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>width <span style="color:#000;font-weight:bold">&lt;</span> 1<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            width <span style="color:#000;font-weight:bold">=</span> 320<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>height <span style="color:#000;font-weight:bold">&lt;</span> 1<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            height <span style="color:#000;font-weight:bold">=</span> 240<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        sizeSet <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">true</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Initiates GIF file creation on the given stream. The stream  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * is not closed automatically.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param os  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *            OutputStream on which GIF images are written.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @return false if initial write failed.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#458;font-weight:bold">boolean</span> <span style="color:#900;font-weight:bold">start</span><span style="color:#000;font-weight:bold">(</span>OutputStream os<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>os <span style="color:#000;font-weight:bold">==</span> <span style="color:#000;font-weight:bold">null</span><span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">return</span> <span style="color:#000;font-weight:bold">false</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">boolean</span> ok <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">true</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        closeStream <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">false</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        out <span style="color:#000;font-weight:bold">=</span> os<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">try</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            writeString<span style="color:#000;font-weight:bold">(</span><span style="color:#d14">&#34;GIF89a&#34;</span><span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// header    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">catch</span> <span style="color:#000;font-weight:bold">(</span>IOException e<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            ok <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">false</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> started <span style="color:#000;font-weight:bold">=</span> ok<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Initiates writing of a GIF file with the specified name.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @param file  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     *            String containing output file name.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * @return false if open or initial write failed.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#458;font-weight:bold">boolean</span> <span style="color:#900;font-weight:bold">start</span><span style="color:#000;font-weight:bold">(</span>String file<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">boolean</span> ok <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">true</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">try</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            out <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> BufferedOutputStream<span style="color:#000;font-weight:bold">(</span><span style="color:#000;font-weight:bold">new</span> FileOutputStream<span style="color:#000;font-weight:bold">(</span>file<span style="color:#000;font-weight:bold">));</span>    
</span></span><span style="display:flex;"><span>            ok <span style="color:#000;font-weight:bold">=</span> start<span style="color:#000;font-weight:bold">(</span>out<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            closeStream <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">true</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">catch</span> <span style="color:#000;font-weight:bold">(</span>IOException e<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            ok <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">false</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> started <span style="color:#000;font-weight:bold">=</span> ok<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Analyzes image colors and creates color map.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">analyzePixels</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> len <span style="color:#000;font-weight:bold">=</span> pixels<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">length</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> nPix <span style="color:#000;font-weight:bold">=</span> len <span style="color:#000;font-weight:bold">/</span> 3<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        indexedPixels <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> <span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">[</span>nPix<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>        Quant nq <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> Quant<span style="color:#000;font-weight:bold">(</span>pixels<span style="color:#000;font-weight:bold">,</span> len<span style="color:#000;font-weight:bold">,</span> sample<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// initialize quantizer    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        colorTab <span style="color:#000;font-weight:bold">=</span> nq<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">process</span><span style="color:#000;font-weight:bold">();</span> <span style="color:#998;font-style:italic">// create reduced palette    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#998;font-style:italic">// convert map from BGR to RGB    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> i <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> i <span style="color:#000;font-weight:bold">&lt;</span> colorTab<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">length</span><span style="color:#000;font-weight:bold">;</span> i <span style="color:#000;font-weight:bold">+=</span> 3<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#458;font-weight:bold">byte</span> temp <span style="color:#000;font-weight:bold">=</span> colorTab<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>            colorTab<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> colorTab<span style="color:#000;font-weight:bold">[</span>i <span style="color:#000;font-weight:bold">+</span> 2<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>            colorTab<span style="color:#000;font-weight:bold">[</span>i <span style="color:#000;font-weight:bold">+</span> 2<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> temp<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            usedEntry<span style="color:#000;font-weight:bold">[</span>i <span style="color:#000;font-weight:bold">/</span> 3<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">false</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// map image pixels to new palette    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#458;font-weight:bold">int</span> k <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> i <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> i <span style="color:#000;font-weight:bold">&lt;</span> nPix<span style="color:#000;font-weight:bold">;</span> i<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#458;font-weight:bold">int</span> index <span style="color:#000;font-weight:bold">=</span> nq<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">map</span><span style="color:#000;font-weight:bold">(</span>pixels<span style="color:#000;font-weight:bold">[</span>k<span style="color:#000;font-weight:bold">++]</span> <span style="color:#000;font-weight:bold">&amp;</span> 0xff<span style="color:#000;font-weight:bold">,</span> pixels<span style="color:#000;font-weight:bold">[</span>k<span style="color:#000;font-weight:bold">++]</span> <span style="color:#000;font-weight:bold">&amp;</span> 0xff<span style="color:#000;font-weight:bold">,</span> pixels<span style="color:#000;font-weight:bold">[</span>k<span style="color:#000;font-weight:bold">++]</span> <span style="color:#000;font-weight:bold">&amp;</span> 0xff<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            usedEntry<span style="color:#000;font-weight:bold">[</span>index<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">true</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            indexedPixels<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">)</span> index<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        pixels <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">null</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        colorDepth <span style="color:#000;font-weight:bold">=</span> 8<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        palSize <span style="color:#000;font-weight:bold">=</span> 7<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// get closest match to transparent color if specified    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>transparent <span style="color:#000;font-weight:bold">!=</span> <span style="color:#000;font-weight:bold">null</span><span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            transIndex <span style="color:#000;font-weight:bold">=</span> findClosest<span style="color:#000;font-weight:bold">(</span>transparent<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Returns index of palette color closest to c  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> <span style="color:#900;font-weight:bold">findClosest</span><span style="color:#000;font-weight:bold">(</span>Color c<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>colorTab <span style="color:#000;font-weight:bold">==</span> <span style="color:#000;font-weight:bold">null</span><span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">return</span> <span style="color:#000;font-weight:bold">-</span>1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> r <span style="color:#000;font-weight:bold">=</span> c<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">getRed</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> g <span style="color:#000;font-weight:bold">=</span> c<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">getGreen</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> b <span style="color:#000;font-weight:bold">=</span> c<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">getBlue</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> minpos <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> dmin <span style="color:#000;font-weight:bold">=</span> 256 <span style="color:#000;font-weight:bold">*</span> 256 <span style="color:#000;font-weight:bold">*</span> 256<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> len <span style="color:#000;font-weight:bold">=</span> colorTab<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">length</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> i <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> i <span style="color:#000;font-weight:bold">&lt;</span> len<span style="color:#000;font-weight:bold">;)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#458;font-weight:bold">int</span> dr <span style="color:#000;font-weight:bold">=</span> r <span style="color:#000;font-weight:bold">-</span> <span style="color:#000;font-weight:bold">(</span>colorTab<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">++]</span> <span style="color:#000;font-weight:bold">&amp;</span> 0xff<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#458;font-weight:bold">int</span> dg <span style="color:#000;font-weight:bold">=</span> g <span style="color:#000;font-weight:bold">-</span> <span style="color:#000;font-weight:bold">(</span>colorTab<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">++]</span> <span style="color:#000;font-weight:bold">&amp;</span> 0xff<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#458;font-weight:bold">int</span> db <span style="color:#000;font-weight:bold">=</span> b <span style="color:#000;font-weight:bold">-</span> <span style="color:#000;font-weight:bold">(</span>colorTab<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">&amp;</span> 0xff<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#458;font-weight:bold">int</span> d <span style="color:#000;font-weight:bold">=</span> dr <span style="color:#000;font-weight:bold">*</span> dr <span style="color:#000;font-weight:bold">+</span> dg <span style="color:#000;font-weight:bold">*</span> dg <span style="color:#000;font-weight:bold">+</span> db <span style="color:#000;font-weight:bold">*</span> db<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#458;font-weight:bold">int</span> index <span style="color:#000;font-weight:bold">=</span> i <span style="color:#000;font-weight:bold">/</span> 3<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>usedEntry<span style="color:#000;font-weight:bold">[</span>index<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">&amp;&amp;</span> <span style="color:#000;font-weight:bold">(</span>d <span style="color:#000;font-weight:bold">&lt;</span> dmin<span style="color:#000;font-weight:bold">))</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                dmin <span style="color:#000;font-weight:bold">=</span> d<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                minpos <span style="color:#000;font-weight:bold">=</span> index<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            i<span style="color:#000;font-weight:bold">++;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> minpos<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Extracts image pixels into byte array &#34;pixels&#34;  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">getImagePixels</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> w <span style="color:#000;font-weight:bold">=</span> image<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">getWidth</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> h <span style="color:#000;font-weight:bold">=</span> image<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">getHeight</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> type <span style="color:#000;font-weight:bold">=</span> image<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">getType</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">((</span>w <span style="color:#000;font-weight:bold">!=</span> width<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">||</span> <span style="color:#000;font-weight:bold">(</span>h <span style="color:#000;font-weight:bold">!=</span> height<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">||</span> <span style="color:#000;font-weight:bold">(</span>type <span style="color:#000;font-weight:bold">!=</span> BufferedImage<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">TYPE_3BYTE_BGR</span><span style="color:#000;font-weight:bold">))</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#998;font-style:italic">// create new image with right size/format    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>            BufferedImage temp <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> BufferedImage<span style="color:#000;font-weight:bold">(</span>width<span style="color:#000;font-weight:bold">,</span> height<span style="color:#000;font-weight:bold">,</span> BufferedImage<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">TYPE_3BYTE_BGR</span><span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            Graphics2D g <span style="color:#000;font-weight:bold">=</span> temp<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">createGraphics</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>            g<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">drawImage</span><span style="color:#000;font-weight:bold">(</span>image<span style="color:#000;font-weight:bold">,</span> 0<span style="color:#000;font-weight:bold">,</span> 0<span style="color:#000;font-weight:bold">,</span> <span style="color:#000;font-weight:bold">null</span><span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            image <span style="color:#000;font-weight:bold">=</span> temp<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        pixels <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">((</span>DataBufferByte<span style="color:#000;font-weight:bold">)</span> image<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">getRaster</span><span style="color:#000;font-weight:bold">().</span><span style="color:#008080">getDataBuffer</span><span style="color:#000;font-weight:bold">()).</span><span style="color:#008080">getData</span><span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Writes Graphic Control Extension  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">writeGraphicCtrlExt</span><span style="color:#000;font-weight:bold">()</span> <span style="color:#000;font-weight:bold">throws</span> IOException    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        out<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">write</span><span style="color:#000;font-weight:bold">(</span>0x21<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// extension introducer    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        out<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">write</span><span style="color:#000;font-weight:bold">(</span>0xf9<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// GCE label    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        out<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">write</span><span style="color:#000;font-weight:bold">(</span>4<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// data block size    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#458;font-weight:bold">int</span> transp<span style="color:#000;font-weight:bold">,</span> disp<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>transparent <span style="color:#000;font-weight:bold">==</span> <span style="color:#000;font-weight:bold">null</span><span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            transp <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            disp <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// dispose = no action    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">else</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            transp <span style="color:#000;font-weight:bold">=</span> 1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            disp <span style="color:#000;font-weight:bold">=</span> 2<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// force clear if using transparent color    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>dispose <span style="color:#000;font-weight:bold">&gt;=</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            disp <span style="color:#000;font-weight:bold">=</span> dispose <span style="color:#000;font-weight:bold">&amp;</span> 7<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">// user override    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        disp <span style="color:#000;font-weight:bold">&lt;&lt;=</span> 2<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// packed fields    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        out<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">write</span><span style="color:#000;font-weight:bold">(</span>0 <span style="color:#000;font-weight:bold">|</span> <span style="color:#998;font-style:italic">// 1:3 reserved    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                disp <span style="color:#000;font-weight:bold">|</span> <span style="color:#998;font-style:italic">// 4:6 disposal    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                0 <span style="color:#000;font-weight:bold">|</span> <span style="color:#998;font-style:italic">// 7 user input - 0 = none    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                transp<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// 8 transparency flag    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>        writeShort<span style="color:#000;font-weight:bold">(</span>delay<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// delay x 1/100 sec    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        out<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">write</span><span style="color:#000;font-weight:bold">(</span>transIndex<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// transparent color index    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        out<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">write</span><span style="color:#000;font-weight:bold">(</span>0<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// block terminator    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Writes Image Descriptor  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">writeImageDesc</span><span style="color:#000;font-weight:bold">()</span> <span style="color:#000;font-weight:bold">throws</span> IOException    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        out<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">write</span><span style="color:#000;font-weight:bold">(</span>0x2c<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// image separator    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        writeShort<span style="color:#000;font-weight:bold">(</span>0<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// image position x,y = 0,0    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        writeShort<span style="color:#000;font-weight:bold">(</span>0<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        writeShort<span style="color:#000;font-weight:bold">(</span>width<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// image size    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        writeShort<span style="color:#000;font-weight:bold">(</span>height<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// packed fields    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>firstFrame<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#998;font-style:italic">// no LCT - GCT is used for first (or only) frame    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>            out<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">write</span><span style="color:#000;font-weight:bold">(</span>0<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">else</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#998;font-style:italic">// specify normal LCT    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>            out<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">write</span><span style="color:#000;font-weight:bold">(</span>0x80 <span style="color:#000;font-weight:bold">|</span> <span style="color:#998;font-style:italic">// 1 local color table 1=yes    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                    0 <span style="color:#000;font-weight:bold">|</span> <span style="color:#998;font-style:italic">// 2 interlace - 0=no    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                    0 <span style="color:#000;font-weight:bold">|</span> <span style="color:#998;font-style:italic">// 3 sorted - 0=no    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                    0 <span style="color:#000;font-weight:bold">|</span> <span style="color:#998;font-style:italic">// 4-5 reserved    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                    palSize<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// 6-8 size of color table    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Writes Logical Screen Descriptor  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">writeLSD</span><span style="color:#000;font-weight:bold">()</span> <span style="color:#000;font-weight:bold">throws</span> IOException    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// logical screen size    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        writeShort<span style="color:#000;font-weight:bold">(</span>width<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        writeShort<span style="color:#000;font-weight:bold">(</span>height<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// packed fields    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        out<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">write</span><span style="color:#000;font-weight:bold">((</span>0x80 <span style="color:#000;font-weight:bold">|</span> <span style="color:#998;font-style:italic">// 1 : global color table flag = 1 (gct used)    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                0x70 <span style="color:#000;font-weight:bold">|</span> <span style="color:#998;font-style:italic">// 2-4 : color resolution = 7    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                0x00 <span style="color:#000;font-weight:bold">|</span> <span style="color:#998;font-style:italic">// 5 : gct sort flag = 0    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>                palSize<span style="color:#000;font-weight:bold">));</span> <span style="color:#998;font-style:italic">// 6-8 : gct size    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>        out<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">write</span><span style="color:#000;font-weight:bold">(</span>0<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// background color index    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        out<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">write</span><span style="color:#000;font-weight:bold">(</span>0<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// pixel aspect ratio - assume 1:1    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Writes Netscape application extension to define  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * repeat count.  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">writeNetscapeExt</span><span style="color:#000;font-weight:bold">()</span> <span style="color:#000;font-weight:bold">throws</span> IOException    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        out<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">write</span><span style="color:#000;font-weight:bold">(</span>0x21<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// extension introducer    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        out<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">write</span><span style="color:#000;font-weight:bold">(</span>0xff<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// app extension label    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        out<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">write</span><span style="color:#000;font-weight:bold">(</span>11<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// block size    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        writeString<span style="color:#000;font-weight:bold">(</span><span style="color:#d14">&#34;NETSCAPE&#34;</span> <span style="color:#000;font-weight:bold">+</span> <span style="color:#d14">&#34;2.0&#34;</span><span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// app id + auth code    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        out<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">write</span><span style="color:#000;font-weight:bold">(</span>3<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// sub-block size    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        out<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">write</span><span style="color:#000;font-weight:bold">(</span>1<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// loop sub-block id    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        writeShort<span style="color:#000;font-weight:bold">(</span>repeat<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// loop count (extra iterations, 0=repeat forever)    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>        out<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">write</span><span style="color:#000;font-weight:bold">(</span>0<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">// block terminator    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Writes color table  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">writePalette</span><span style="color:#000;font-weight:bold">()</span> <span style="color:#000;font-weight:bold">throws</span> IOException    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        out<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">write</span><span style="color:#000;font-weight:bold">(</span>colorTab<span style="color:#000;font-weight:bold">,</span> 0<span style="color:#000;font-weight:bold">,</span> colorTab<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">length</span><span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> n <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span>3 <span style="color:#000;font-weight:bold">*</span> 256<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">-</span> colorTab<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">length</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> i <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> i <span style="color:#000;font-weight:bold">&lt;</span> n<span style="color:#000;font-weight:bold">;</span> i<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            out<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">write</span><span style="color:#000;font-weight:bold">(</span>0<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Encodes and writes pixel data  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">writePixels</span><span style="color:#000;font-weight:bold">()</span> <span style="color:#000;font-weight:bold">throws</span> IOException    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        Encoder encoder <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> Encoder<span style="color:#000;font-weight:bold">(</span>width<span style="color:#000;font-weight:bold">,</span> height<span style="color:#000;font-weight:bold">,</span> indexedPixels<span style="color:#000;font-weight:bold">,</span> colorDepth<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        encoder<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">encode</span><span style="color:#000;font-weight:bold">(</span>out<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Write 16-bit value to output stream, LSB first  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">writeShort</span><span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> value<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">throws</span> IOException    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        out<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">write</span><span style="color:#000;font-weight:bold">(</span>value <span style="color:#000;font-weight:bold">&amp;</span> 0xff<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        out<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">write</span><span style="color:#000;font-weight:bold">((</span>value <span style="color:#000;font-weight:bold">&gt;&gt;</span> 8<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">&amp;</span> 0xff<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Writes string to output stream  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">writeString</span><span style="color:#000;font-weight:bold">(</span>String s<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">throws</span> IOException    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> i <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> i <span style="color:#000;font-weight:bold">&lt;</span> s<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">length</span><span style="color:#000;font-weight:bold">();</span> i<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            out<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">write</span><span style="color:#000;font-weight:bold">((</span><span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">)</span> s<span style="color:#000;font-weight:bold">.</span><span style="color:#008080">charAt</span><span style="color:#000;font-weight:bold">(</span>i<span style="color:#000;font-weight:bold">));</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span>  
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="234-quant">2.3.4 Quant</h3>
<div class="highlight"><div style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  1
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  2
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  3
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  4
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  5
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  6
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  7
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  8
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  9
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 10
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 11
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 12
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 13
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 14
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 15
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 16
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 17
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 18
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 19
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 20
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 21
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 22
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 23
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 24
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 25
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 26
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 27
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 28
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 29
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 30
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 31
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 32
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 33
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 34
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 35
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 36
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 37
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 38
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 39
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 40
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 41
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 42
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 43
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 44
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 45
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 46
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 47
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 48
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 49
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 50
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 51
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 52
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 53
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 54
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 55
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 56
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 57
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 58
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 59
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 60
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 61
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 62
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 63
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 64
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 65
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 66
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 67
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 68
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 69
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 70
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 71
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 72
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 73
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 74
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 75
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 76
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 77
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 78
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 79
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 80
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 81
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 82
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 83
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 84
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 85
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 86
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 87
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 88
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 89
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 90
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 91
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 92
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 93
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 94
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 95
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 96
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 97
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 98
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 99
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">100
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">101
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">102
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">103
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">104
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">105
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">106
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">107
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">108
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">109
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">110
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">111
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">112
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">113
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">114
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">115
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">116
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">117
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">118
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">119
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">120
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">121
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">122
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">123
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">124
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">125
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">126
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">127
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">128
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">129
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">130
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">131
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">132
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">133
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">134
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">135
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">136
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">137
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">138
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">139
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">140
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">141
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">142
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">143
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">144
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">145
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">146
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">147
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">148
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">149
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">150
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">151
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">152
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">153
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">154
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">155
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">156
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">157
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">158
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">159
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">160
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">161
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">162
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">163
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">164
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">165
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">166
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">167
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">168
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">169
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">170
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">171
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">172
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">173
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">174
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">175
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">176
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">177
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">178
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">179
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">180
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">181
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">182
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">183
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">184
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">185
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">186
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">187
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">188
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">189
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">190
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">191
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">192
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">193
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">194
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">195
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">196
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">197
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">198
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">199
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">200
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">201
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">202
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">203
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">204
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">205
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">206
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">207
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">208
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">209
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">210
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">211
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">212
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">213
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">214
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">215
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">216
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">217
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">218
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">219
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">220
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">221
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">222
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">223
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">224
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">225
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">226
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">227
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">228
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">229
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">230
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">231
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">232
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">233
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">234
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">235
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">236
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">237
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">238
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">239
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">240
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">241
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">242
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">243
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">244
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">245
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">246
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">247
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">248
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">249
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">250
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">251
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">252
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">253
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">254
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">255
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">256
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">257
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">258
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">259
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">260
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">261
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">262
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">263
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">264
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">265
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">266
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">267
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">268
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">269
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">270
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">271
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">272
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">273
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">274
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">275
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">276
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">277
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">278
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">279
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">280
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">281
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">282
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">283
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">284
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">285
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">286
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">287
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">288
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">289
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">290
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">291
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">292
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">293
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">294
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">295
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">296
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">297
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">298
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">299
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">300
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">301
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">302
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">303
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">304
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">305
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">306
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">307
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">308
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">309
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">310
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">311
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">312
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">313
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">314
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">315
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">316
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">317
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">318
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">319
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">320
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">321
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">322
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">323
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">324
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">325
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">326
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">327
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">328
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">329
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">330
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">331
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">332
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">333
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">334
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">335
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">336
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">337
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">338
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">339
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">340
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">341
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">342
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">343
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">344
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">345
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">346
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">347
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">348
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">349
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">350
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">351
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">352
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">353
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">354
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">355
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">356
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">357
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">358
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">359
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">360
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">361
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">362
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">363
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">364
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">365
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">366
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">367
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">368
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">369
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">370
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">371
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">372
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">373
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">374
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">375
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">376
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">377
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">378
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">379
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">380
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">381
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">382
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">383
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">384
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">385
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">386
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">387
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">388
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">389
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">390
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">391
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">392
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">393
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">394
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">395
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">396
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">397
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">398
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">399
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">400
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">401
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">402
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">403
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">404
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">405
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">406
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">407
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">408
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">409
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">410
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">411
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">412
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">413
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">414
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">415
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">416
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">417
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">418
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">419
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">420
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">421
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">422
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">423
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">424
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">425
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">426
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">427
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">428
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">429
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">430
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">431
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">432
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">433
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">434
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">435
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">436
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">437
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">438
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">439
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">440
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">441
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">442
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">443
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">444
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">445
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">446
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">447
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">448
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">449
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">450
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">451
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">452
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">453
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">454
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">455
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">456
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">457
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">458
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">459
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">460
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">461
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">462
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">463
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">464
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">465
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">466
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">467
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">468
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">469
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">470
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">471
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">472
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">473
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">474
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">475
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">476
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">477
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">478
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">479
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">480
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">481
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">482
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">483
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">484
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">485
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">486
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">487
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">488
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">489
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">490
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">491
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">492
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">493
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">494
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">495
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">496
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">497
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">498
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">499
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">500
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">501
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">502
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">503
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">504
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">505
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">506
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">507
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">508
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">509
</span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">510
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#000;font-weight:bold">package</span> <span style="color:#555">com.test.test</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.io.FileNotFoundException</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">import</span> <span style="color:#555">java.io.FileOutputStream</span><span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">/**  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> * &lt;p&gt;  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> * &lt;/p&gt;  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> *  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> * @author: wuhongjun  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> * @version:1.0  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"> */</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">public</span> <span style="color:#000;font-weight:bold">class</span> <span style="color:#458;font-weight:bold">Quant</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> netsize <span style="color:#000;font-weight:bold">=</span> 256<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">/* number of colours used */</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/* four primes near 500 - assume no image has a length so large */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/* that it is divisible by all four primes */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> prime1 <span style="color:#000;font-weight:bold">=</span> 499<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> prime2 <span style="color:#000;font-weight:bold">=</span> 491<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> prime3 <span style="color:#000;font-weight:bold">=</span> 487<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> prime4 <span style="color:#000;font-weight:bold">=</span> 503<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> minpicturebytes <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span>3 <span style="color:#000;font-weight:bold">*</span> prime4<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/* minimum size for input image */</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/*  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Program Skeleton  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * ----------------  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * [select samplefac in range 1..30]  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * [read image from input file]  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * pic = (unsigned char*) malloc(3*width*height);  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * initnet(pic,3*width*height,samplefac);  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * learn();  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * unbiasnet();  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * [write output image header, using writecolourmap(f)]  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * inxbuild();  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * write output image using inxsearch(b,g,r)  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/*  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Network Definitions  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * -------------------  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> maxnetpos <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span>netsize <span style="color:#000;font-weight:bold">-</span> 1<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> netbiasshift <span style="color:#000;font-weight:bold">=</span> 4<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">/* bias for colour values */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> ncycles <span style="color:#000;font-weight:bold">=</span> 100<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">/* no. of learning cycles */</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/* defs for freq and bias */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> intbiasshift <span style="color:#000;font-weight:bold">=</span> 16<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">/* bias for fractions */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> intbias <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(((</span><span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">)</span> 1<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">&lt;&lt;</span> intbiasshift<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> gammashift <span style="color:#000;font-weight:bold">=</span> 10<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">/* gamma = 1024 */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> gamma <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(((</span><span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">)</span> 1<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">&lt;&lt;</span> gammashift<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> betashift <span style="color:#000;font-weight:bold">=</span> 10<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> beta <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span>intbias <span style="color:#000;font-weight:bold">&gt;&gt;</span> betashift<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">/* beta = 1/1024 */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> betagamma <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span>intbias <span style="color:#000;font-weight:bold">&lt;&lt;</span> <span style="color:#000;font-weight:bold">(</span>gammashift <span style="color:#000;font-weight:bold">-</span> betashift<span style="color:#000;font-weight:bold">));</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/* defs for decreasing radius factor */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> initrad <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span>netsize <span style="color:#000;font-weight:bold">&gt;&gt;</span> 3<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">/* for 256 cols, radius starts */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> radiusbiasshift <span style="color:#000;font-weight:bold">=</span> 6<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">/* at 32.0 biased by 6 bits */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> radiusbias <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(((</span><span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">)</span> 1<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">&lt;&lt;</span> radiusbiasshift<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> initradius <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span>initrad <span style="color:#000;font-weight:bold">*</span> radiusbias<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">/* and decreases by a */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> radiusdec <span style="color:#000;font-weight:bold">=</span> 30<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">/* factor of 1/30 each cycle */</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/* defs for decreasing alpha factor */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> alphabiasshift <span style="color:#000;font-weight:bold">=</span> 10<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">/* alpha starts at 1.0 */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> initalpha <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(((</span><span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">)</span> 1<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">&lt;&lt;</span> alphabiasshift<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> alphadec<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">/* biased by 10 bits */</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/* radbias and alpharadbias used for radpower calculation */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> radbiasshift <span style="color:#000;font-weight:bold">=</span> 8<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> radbias <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(((</span><span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">)</span> 1<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">&lt;&lt;</span> radbiasshift<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> alpharadbshift <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span>alphabiasshift <span style="color:#000;font-weight:bold">+</span> radbiasshift<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#000;font-weight:bold">static</span> <span style="color:#000;font-weight:bold">final</span> <span style="color:#458;font-weight:bold">int</span> alpharadbias <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(((</span><span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">)</span> 1<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">&lt;&lt;</span> alpharadbshift<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/*  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Types and Global Variables  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * --------------------------  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">[]</span> thepicture<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">/* the input image itself */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> lengthcount<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">/* lengthcount = H*W*3 */</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> samplefac<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">/* sampling factor 1..30 */</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">// typedef int pixel[4]; /* BGRc */    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[][]</span> network<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">/* the network itself - [netsize][4] */</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[]</span> netindex <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[</span>256<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/* for network lookup - really 256 */</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[]</span> bias <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[</span>netsize<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/* bias and freq arrays for learning */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[]</span> freq <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[</span>netsize<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[]</span> radpower <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[</span>initrad<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/* radpower for precomputation */</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/*  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Initialise network in range (0,0,0) to (255,255,255) and set parameters  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * -----------------------------------------------------------------------  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#900;font-weight:bold">Quant</span><span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">[]</span> thepic<span style="color:#000;font-weight:bold">,</span> <span style="color:#458;font-weight:bold">int</span> len<span style="color:#000;font-weight:bold">,</span> <span style="color:#458;font-weight:bold">int</span> sample<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> i<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[]</span> p<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        thepicture <span style="color:#000;font-weight:bold">=</span> thepic<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        lengthcount <span style="color:#000;font-weight:bold">=</span> len<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        samplefac <span style="color:#000;font-weight:bold">=</span> sample<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        network <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[</span>netsize<span style="color:#000;font-weight:bold">][];</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span>i <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> i <span style="color:#000;font-weight:bold">&lt;</span> netsize<span style="color:#000;font-weight:bold">;</span> i<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            network<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[</span>4<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>            p <span style="color:#000;font-weight:bold">=</span> network<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>            p<span style="color:#000;font-weight:bold">[</span>0<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> p<span style="color:#000;font-weight:bold">[</span>1<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> p<span style="color:#000;font-weight:bold">[</span>2<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span>i <span style="color:#000;font-weight:bold">&lt;&lt;</span> <span style="color:#000;font-weight:bold">(</span>netbiasshift <span style="color:#000;font-weight:bold">+</span> 8<span style="color:#000;font-weight:bold">))</span> <span style="color:#000;font-weight:bold">/</span> netsize<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            freq<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> intbias <span style="color:#000;font-weight:bold">/</span> netsize<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">/* 1/netsize */</span>    
</span></span><span style="display:flex;"><span>            bias<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">[]</span> <span style="color:#900;font-weight:bold">colorMap</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">[]</span> map <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> <span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">[</span>3 <span style="color:#000;font-weight:bold">*</span> netsize<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[]</span> index <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">new</span> <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[</span>netsize<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> i <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> i <span style="color:#000;font-weight:bold">&lt;</span> netsize<span style="color:#000;font-weight:bold">;</span> i<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>            index<span style="color:#000;font-weight:bold">[</span>network<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">][</span>3<span style="color:#000;font-weight:bold">]]</span> <span style="color:#000;font-weight:bold">=</span> i<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> k <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> i <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> i <span style="color:#000;font-weight:bold">&lt;</span> netsize<span style="color:#000;font-weight:bold">;</span> i<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#458;font-weight:bold">int</span> j <span style="color:#000;font-weight:bold">=</span> index<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>            map<span style="color:#000;font-weight:bold">[</span>k<span style="color:#000;font-weight:bold">++]</span> <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">(</span>network<span style="color:#000;font-weight:bold">[</span>j<span style="color:#000;font-weight:bold">][</span>0<span style="color:#000;font-weight:bold">]);</span>    
</span></span><span style="display:flex;"><span>            map<span style="color:#000;font-weight:bold">[</span>k<span style="color:#000;font-weight:bold">++]</span> <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">(</span>network<span style="color:#000;font-weight:bold">[</span>j<span style="color:#000;font-weight:bold">][</span>1<span style="color:#000;font-weight:bold">]);</span>    
</span></span><span style="display:flex;"><span>            map<span style="color:#000;font-weight:bold">[</span>k<span style="color:#000;font-weight:bold">++]</span> <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">(</span>network<span style="color:#000;font-weight:bold">[</span>j<span style="color:#000;font-weight:bold">][</span>2<span style="color:#000;font-weight:bold">]);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> map<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/*  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Insertion sort of network and building of netindex[0..255] (to do after unbias)  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * -------------------------------------------------------------------------------  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">inxbuild</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> i<span style="color:#000;font-weight:bold">,</span> j<span style="color:#000;font-weight:bold">,</span> smallpos<span style="color:#000;font-weight:bold">,</span> smallval<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[]</span> p<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[]</span> q<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> previouscol<span style="color:#000;font-weight:bold">,</span> startpos<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        previouscol <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        startpos <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span>i <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> i <span style="color:#000;font-weight:bold">&lt;</span> netsize<span style="color:#000;font-weight:bold">;</span> i<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            p <span style="color:#000;font-weight:bold">=</span> network<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>            smallpos <span style="color:#000;font-weight:bold">=</span> i<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            smallval <span style="color:#000;font-weight:bold">=</span> p<span style="color:#000;font-weight:bold">[</span>1<span style="color:#000;font-weight:bold">];</span> <span style="color:#998;font-style:italic">/* index on g */</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#998;font-style:italic">/* find smallest in i..netsize-1 */</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span>j <span style="color:#000;font-weight:bold">=</span> i <span style="color:#000;font-weight:bold">+</span> 1<span style="color:#000;font-weight:bold">;</span> j <span style="color:#000;font-weight:bold">&lt;</span> netsize<span style="color:#000;font-weight:bold">;</span> j<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                q <span style="color:#000;font-weight:bold">=</span> network<span style="color:#000;font-weight:bold">[</span>j<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>q<span style="color:#000;font-weight:bold">[</span>1<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">&lt;</span> smallval<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">{</span> <span style="color:#998;font-style:italic">/* index on g */</span>    
</span></span><span style="display:flex;"><span>                    smallpos <span style="color:#000;font-weight:bold">=</span> j<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    smallval <span style="color:#000;font-weight:bold">=</span> q<span style="color:#000;font-weight:bold">[</span>1<span style="color:#000;font-weight:bold">];</span> <span style="color:#998;font-style:italic">/* index on g */</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            q <span style="color:#000;font-weight:bold">=</span> network<span style="color:#000;font-weight:bold">[</span>smallpos<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#998;font-style:italic">/* swap p (i) and q (smallpos) entries */</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>i <span style="color:#000;font-weight:bold">!=</span> smallpos<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                j <span style="color:#000;font-weight:bold">=</span> q<span style="color:#000;font-weight:bold">[</span>0<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>                q<span style="color:#000;font-weight:bold">[</span>0<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> p<span style="color:#000;font-weight:bold">[</span>0<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>                p<span style="color:#000;font-weight:bold">[</span>0<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> j<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                j <span style="color:#000;font-weight:bold">=</span> q<span style="color:#000;font-weight:bold">[</span>1<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>                q<span style="color:#000;font-weight:bold">[</span>1<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> p<span style="color:#000;font-weight:bold">[</span>1<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>                p<span style="color:#000;font-weight:bold">[</span>1<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> j<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                j <span style="color:#000;font-weight:bold">=</span> q<span style="color:#000;font-weight:bold">[</span>2<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>                q<span style="color:#000;font-weight:bold">[</span>2<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> p<span style="color:#000;font-weight:bold">[</span>2<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>                p<span style="color:#000;font-weight:bold">[</span>2<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> j<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                j <span style="color:#000;font-weight:bold">=</span> q<span style="color:#000;font-weight:bold">[</span>3<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>                q<span style="color:#000;font-weight:bold">[</span>3<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> p<span style="color:#000;font-weight:bold">[</span>3<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>                p<span style="color:#000;font-weight:bold">[</span>3<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> j<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#998;font-style:italic">/* smallval entry is now in position i */</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>smallval <span style="color:#000;font-weight:bold">!=</span> previouscol<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                netindex<span style="color:#000;font-weight:bold">[</span>previouscol<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span>startpos <span style="color:#000;font-weight:bold">+</span> i<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">&gt;&gt;</span> 1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span>j <span style="color:#000;font-weight:bold">=</span> previouscol <span style="color:#000;font-weight:bold">+</span> 1<span style="color:#000;font-weight:bold">;</span> j <span style="color:#000;font-weight:bold">&lt;</span> smallval<span style="color:#000;font-weight:bold">;</span> j<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>                    netindex<span style="color:#000;font-weight:bold">[</span>j<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> i<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                previouscol <span style="color:#000;font-weight:bold">=</span> smallval<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                startpos <span style="color:#000;font-weight:bold">=</span> i<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        netindex<span style="color:#000;font-weight:bold">[</span>previouscol<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span>startpos <span style="color:#000;font-weight:bold">+</span> maxnetpos<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">&gt;&gt;</span> 1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span>j <span style="color:#000;font-weight:bold">=</span> previouscol <span style="color:#000;font-weight:bold">+</span> 1<span style="color:#000;font-weight:bold">;</span> j <span style="color:#000;font-weight:bold">&lt;</span> 256<span style="color:#000;font-weight:bold">;</span> j<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>            netindex<span style="color:#000;font-weight:bold">[</span>j<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> maxnetpos<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">/* really 256 */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/*  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Main Learning Loop  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * ------------------  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">learn</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> i<span style="color:#000;font-weight:bold">,</span> j<span style="color:#000;font-weight:bold">,</span> b<span style="color:#000;font-weight:bold">,</span> g<span style="color:#000;font-weight:bold">,</span> r<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> radius<span style="color:#000;font-weight:bold">,</span> rad<span style="color:#000;font-weight:bold">,</span> alpha<span style="color:#000;font-weight:bold">,</span> step<span style="color:#000;font-weight:bold">,</span> delta<span style="color:#000;font-weight:bold">,</span> samplepixels<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">[]</span> p<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> pix<span style="color:#000;font-weight:bold">,</span> lim<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>lengthcount <span style="color:#000;font-weight:bold">&lt;</span> minpicturebytes<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            samplefac <span style="color:#000;font-weight:bold">=</span> 1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        alphadec <span style="color:#000;font-weight:bold">=</span> 30 <span style="color:#000;font-weight:bold">+</span> <span style="color:#000;font-weight:bold">((</span>samplefac <span style="color:#000;font-weight:bold">-</span> 1<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">/</span> 3<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        p <span style="color:#000;font-weight:bold">=</span> thepicture<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        pix <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        lim <span style="color:#000;font-weight:bold">=</span> lengthcount<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        samplepixels <span style="color:#000;font-weight:bold">=</span> lengthcount <span style="color:#000;font-weight:bold">/</span> <span style="color:#000;font-weight:bold">(</span>3 <span style="color:#000;font-weight:bold">*</span> samplefac<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        delta <span style="color:#000;font-weight:bold">=</span> samplepixels <span style="color:#000;font-weight:bold">/</span> ncycles<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        alpha <span style="color:#000;font-weight:bold">=</span> initalpha<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        radius <span style="color:#000;font-weight:bold">=</span> initradius<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        rad <span style="color:#000;font-weight:bold">=</span> radius <span style="color:#000;font-weight:bold">&gt;&gt;</span> radiusbiasshift<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>rad <span style="color:#000;font-weight:bold">&lt;=</span> 1<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            rad <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span>i <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> i <span style="color:#000;font-weight:bold">&lt;</span> rad<span style="color:#000;font-weight:bold">;</span> i<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>            radpower<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> alpha <span style="color:#000;font-weight:bold">*</span> <span style="color:#000;font-weight:bold">(((</span>rad <span style="color:#000;font-weight:bold">*</span> rad <span style="color:#000;font-weight:bold">-</span> i <span style="color:#000;font-weight:bold">*</span> i<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">*</span> radbias<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">/</span> <span style="color:#000;font-weight:bold">(</span>rad <span style="color:#000;font-weight:bold">*</span> rad<span style="color:#000;font-weight:bold">));</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// fprintf(stderr,&#34;beginning 1D learning: initial radius=%d\n&#34;, rad);    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>lengthcount <span style="color:#000;font-weight:bold">&lt;</span> minpicturebytes<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            step <span style="color:#000;font-weight:bold">=</span> 3<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">else</span> <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">((</span>lengthcount <span style="color:#000;font-weight:bold">%</span> prime1<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">!=</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            step <span style="color:#000;font-weight:bold">=</span> 3 <span style="color:#000;font-weight:bold">*</span> prime1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">else</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">((</span>lengthcount <span style="color:#000;font-weight:bold">%</span> prime2<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">!=</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                step <span style="color:#000;font-weight:bold">=</span> 3 <span style="color:#000;font-weight:bold">*</span> prime2<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">else</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">((</span>lengthcount <span style="color:#000;font-weight:bold">%</span> prime3<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">!=</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                    step <span style="color:#000;font-weight:bold">=</span> 3 <span style="color:#000;font-weight:bold">*</span> prime3<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">else</span>    
</span></span><span style="display:flex;"><span>                    step <span style="color:#000;font-weight:bold">=</span> 3 <span style="color:#000;font-weight:bold">*</span> prime4<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        i <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">while</span> <span style="color:#000;font-weight:bold">(</span>i <span style="color:#000;font-weight:bold">&lt;</span> samplepixels<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            b <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span>p<span style="color:#000;font-weight:bold">[</span>pix <span style="color:#000;font-weight:bold">+</span> 0<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">&amp;</span> 0xff<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">&lt;&lt;</span> netbiasshift<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            g <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span>p<span style="color:#000;font-weight:bold">[</span>pix <span style="color:#000;font-weight:bold">+</span> 1<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">&amp;</span> 0xff<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">&lt;&lt;</span> netbiasshift<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            r <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span>p<span style="color:#000;font-weight:bold">[</span>pix <span style="color:#000;font-weight:bold">+</span> 2<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">&amp;</span> 0xff<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">&lt;&lt;</span> netbiasshift<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            j <span style="color:#000;font-weight:bold">=</span> contest<span style="color:#000;font-weight:bold">(</span>b<span style="color:#000;font-weight:bold">,</span> g<span style="color:#000;font-weight:bold">,</span> r<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>            altersingle<span style="color:#000;font-weight:bold">(</span>alpha<span style="color:#000;font-weight:bold">,</span> j<span style="color:#000;font-weight:bold">,</span> b<span style="color:#000;font-weight:bold">,</span> g<span style="color:#000;font-weight:bold">,</span> r<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>rad <span style="color:#000;font-weight:bold">!=</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                alterneigh<span style="color:#000;font-weight:bold">(</span>rad<span style="color:#000;font-weight:bold">,</span> j<span style="color:#000;font-weight:bold">,</span> b<span style="color:#000;font-weight:bold">,</span> g<span style="color:#000;font-weight:bold">,</span> r<span style="color:#000;font-weight:bold">);</span> <span style="color:#998;font-style:italic">/* alter neighbours */</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>            pix <span style="color:#000;font-weight:bold">+=</span> step<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>pix <span style="color:#000;font-weight:bold">&gt;=</span> lim<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                pix <span style="color:#000;font-weight:bold">-=</span> lengthcount<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>            i<span style="color:#000;font-weight:bold">++;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>delta <span style="color:#000;font-weight:bold">==</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                delta <span style="color:#000;font-weight:bold">=</span> 1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>i <span style="color:#000;font-weight:bold">%</span> delta <span style="color:#000;font-weight:bold">==</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                alpha <span style="color:#000;font-weight:bold">-=</span> alpha <span style="color:#000;font-weight:bold">/</span> alphadec<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                radius <span style="color:#000;font-weight:bold">-=</span> radius <span style="color:#000;font-weight:bold">/</span> radiusdec<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                rad <span style="color:#000;font-weight:bold">=</span> radius <span style="color:#000;font-weight:bold">&gt;&gt;</span> radiusbiasshift<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>rad <span style="color:#000;font-weight:bold">&lt;=</span> 1<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                    rad <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span>j <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> j <span style="color:#000;font-weight:bold">&lt;</span> rad<span style="color:#000;font-weight:bold">;</span> j<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>                    radpower<span style="color:#000;font-weight:bold">[</span>j<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> alpha <span style="color:#000;font-weight:bold">*</span> <span style="color:#000;font-weight:bold">(((</span>rad <span style="color:#000;font-weight:bold">*</span> rad <span style="color:#000;font-weight:bold">-</span> j <span style="color:#000;font-weight:bold">*</span> j<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">*</span> radbias<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">/</span> <span style="color:#000;font-weight:bold">(</span>rad <span style="color:#000;font-weight:bold">*</span> rad<span style="color:#000;font-weight:bold">));</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">// fprintf(stderr,&#34;finished 1D learning: final alpha=%f !\n&#34;,((float)alpha)/initalpha);    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/*  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Search for BGR values 0..255 (after net is unbiased) and return colour index  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * ----------------------------------------------------------------------------  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#458;font-weight:bold">int</span> <span style="color:#900;font-weight:bold">map</span><span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> b<span style="color:#000;font-weight:bold">,</span> <span style="color:#458;font-weight:bold">int</span> g<span style="color:#000;font-weight:bold">,</span> <span style="color:#458;font-weight:bold">int</span> r<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> i<span style="color:#000;font-weight:bold">,</span> j<span style="color:#000;font-weight:bold">,</span> dist<span style="color:#000;font-weight:bold">,</span> a<span style="color:#000;font-weight:bold">,</span> bestd<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[]</span> p<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> best<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        bestd <span style="color:#000;font-weight:bold">=</span> 1000<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">/* biggest possible dist is 256*3 */</span>    
</span></span><span style="display:flex;"><span>        best <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">-</span>1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        i <span style="color:#000;font-weight:bold">=</span> netindex<span style="color:#000;font-weight:bold">[</span>g<span style="color:#000;font-weight:bold">];</span> <span style="color:#998;font-style:italic">/* index on g */</span>    
</span></span><span style="display:flex;"><span>        j <span style="color:#000;font-weight:bold">=</span> i <span style="color:#000;font-weight:bold">-</span> 1<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">/* start at netindex[g] and work outwards */</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">while</span> <span style="color:#000;font-weight:bold">((</span>i <span style="color:#000;font-weight:bold">&lt;</span> netsize<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">||</span> <span style="color:#000;font-weight:bold">(</span>j <span style="color:#000;font-weight:bold">&gt;=</span> 0<span style="color:#000;font-weight:bold">))</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>i <span style="color:#000;font-weight:bold">&lt;</span> netsize<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                p <span style="color:#000;font-weight:bold">=</span> network<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>                dist <span style="color:#000;font-weight:bold">=</span> p<span style="color:#000;font-weight:bold">[</span>1<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">-</span> g<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">/* inx key */</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>dist <span style="color:#000;font-weight:bold">&gt;=</span> bestd<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                    i <span style="color:#000;font-weight:bold">=</span> netsize<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">/* stop iter */</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">else</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                    i<span style="color:#000;font-weight:bold">++;</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>dist <span style="color:#000;font-weight:bold">&lt;</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                        dist <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">-</span>dist<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    a <span style="color:#000;font-weight:bold">=</span> p<span style="color:#000;font-weight:bold">[</span>0<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">-</span> b<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>a <span style="color:#000;font-weight:bold">&lt;</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                        a <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">-</span>a<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    dist <span style="color:#000;font-weight:bold">+=</span> a<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>dist <span style="color:#000;font-weight:bold">&lt;</span> bestd<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                        a <span style="color:#000;font-weight:bold">=</span> p<span style="color:#000;font-weight:bold">[</span>2<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">-</span> r<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>a <span style="color:#000;font-weight:bold">&lt;</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                            a <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">-</span>a<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                        dist <span style="color:#000;font-weight:bold">+=</span> a<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>dist <span style="color:#000;font-weight:bold">&lt;</span> bestd<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                            bestd <span style="color:#000;font-weight:bold">=</span> dist<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                            best <span style="color:#000;font-weight:bold">=</span> p<span style="color:#000;font-weight:bold">[</span>3<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>                        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>j <span style="color:#000;font-weight:bold">&gt;=</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                p <span style="color:#000;font-weight:bold">=</span> network<span style="color:#000;font-weight:bold">[</span>j<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>                dist <span style="color:#000;font-weight:bold">=</span> g <span style="color:#000;font-weight:bold">-</span> p<span style="color:#000;font-weight:bold">[</span>1<span style="color:#000;font-weight:bold">];</span> <span style="color:#998;font-style:italic">/* inx key - reverse dif */</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>dist <span style="color:#000;font-weight:bold">&gt;=</span> bestd<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                    j <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">-</span>1<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">/* stop iter */</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">else</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                    j<span style="color:#000;font-weight:bold">--;</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>dist <span style="color:#000;font-weight:bold">&lt;</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                        dist <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">-</span>dist<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    a <span style="color:#000;font-weight:bold">=</span> p<span style="color:#000;font-weight:bold">[</span>0<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">-</span> b<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>a <span style="color:#000;font-weight:bold">&lt;</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                        a <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">-</span>a<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    dist <span style="color:#000;font-weight:bold">+=</span> a<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>dist <span style="color:#000;font-weight:bold">&lt;</span> bestd<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                        a <span style="color:#000;font-weight:bold">=</span> p<span style="color:#000;font-weight:bold">[</span>2<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">-</span> r<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>a <span style="color:#000;font-weight:bold">&lt;</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                            a <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">-</span>a<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                        dist <span style="color:#000;font-weight:bold">+=</span> a<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>dist <span style="color:#000;font-weight:bold">&lt;</span> bestd<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                            bestd <span style="color:#000;font-weight:bold">=</span> dist<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                            best <span style="color:#000;font-weight:bold">=</span> p<span style="color:#000;font-weight:bold">[</span>3<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>                        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>                    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> <span style="color:#000;font-weight:bold">(</span>best<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#458;font-weight:bold">byte</span><span style="color:#000;font-weight:bold">[]</span> <span style="color:#900;font-weight:bold">process</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>        learn<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        unbiasnet<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        inxbuild<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> colorMap<span style="color:#000;font-weight:bold">();</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/*  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Unbias network to give byte values 0..255 and record position i to prepare for sort  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * -----------------------------------------------------------------------------------  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">public</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">unbiasnet</span><span style="color:#000;font-weight:bold">()</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> i<span style="color:#000;font-weight:bold">,</span> j<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span>i <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> i <span style="color:#000;font-weight:bold">&lt;</span> netsize<span style="color:#000;font-weight:bold">;</span> i<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            network<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">][</span>0<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">&gt;&gt;=</span> netbiasshift<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            network<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">][</span>1<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">&gt;&gt;=</span> netbiasshift<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            network<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">][</span>2<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">&gt;&gt;=</span> netbiasshift<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            network<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">][</span>3<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">=</span> i<span style="color:#000;font-weight:bold">;</span> <span style="color:#998;font-style:italic">/* record colour no */</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/*  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Move adjacent neurons by precomputed alpha*(1-((i-j)^2/[r]^2)) in radpower[|i-j|]  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * ---------------------------------------------------------------------------------  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">alterneigh</span><span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> rad<span style="color:#000;font-weight:bold">,</span> <span style="color:#458;font-weight:bold">int</span> i<span style="color:#000;font-weight:bold">,</span> <span style="color:#458;font-weight:bold">int</span> b<span style="color:#000;font-weight:bold">,</span> <span style="color:#458;font-weight:bold">int</span> g<span style="color:#000;font-weight:bold">,</span> <span style="color:#458;font-weight:bold">int</span> r<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> j<span style="color:#000;font-weight:bold">,</span> k<span style="color:#000;font-weight:bold">,</span> lo<span style="color:#000;font-weight:bold">,</span> hi<span style="color:#000;font-weight:bold">,</span> a<span style="color:#000;font-weight:bold">,</span> m<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[]</span> p<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        lo <span style="color:#000;font-weight:bold">=</span> i <span style="color:#000;font-weight:bold">-</span> rad<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>lo <span style="color:#000;font-weight:bold">&lt;</span> <span style="color:#000;font-weight:bold">-</span>1<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            lo <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">-</span>1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        hi <span style="color:#000;font-weight:bold">=</span> i <span style="color:#000;font-weight:bold">+</span> rad<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>hi <span style="color:#000;font-weight:bold">&gt;</span> netsize<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            hi <span style="color:#000;font-weight:bold">=</span> netsize<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        j <span style="color:#000;font-weight:bold">=</span> i <span style="color:#000;font-weight:bold">+</span> 1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        k <span style="color:#000;font-weight:bold">=</span> i <span style="color:#000;font-weight:bold">-</span> 1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        m <span style="color:#000;font-weight:bold">=</span> 1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">while</span> <span style="color:#000;font-weight:bold">((</span>j <span style="color:#000;font-weight:bold">&lt;</span> hi<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">||</span> <span style="color:#000;font-weight:bold">(</span>k <span style="color:#000;font-weight:bold">&gt;</span> lo<span style="color:#000;font-weight:bold">))</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            a <span style="color:#000;font-weight:bold">=</span> radpower<span style="color:#000;font-weight:bold">[</span>m<span style="color:#000;font-weight:bold">++];</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>j <span style="color:#000;font-weight:bold">&lt;</span> hi<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                p <span style="color:#000;font-weight:bold">=</span> network<span style="color:#000;font-weight:bold">[</span>j<span style="color:#000;font-weight:bold">++];</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">try</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                    p<span style="color:#000;font-weight:bold">[</span>0<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">-=</span> <span style="color:#000;font-weight:bold">(</span>a <span style="color:#000;font-weight:bold">*</span> <span style="color:#000;font-weight:bold">(</span>p<span style="color:#000;font-weight:bold">[</span>0<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">-</span> b<span style="color:#000;font-weight:bold">))</span> <span style="color:#000;font-weight:bold">/</span> alpharadbias<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    p<span style="color:#000;font-weight:bold">[</span>1<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">-=</span> <span style="color:#000;font-weight:bold">(</span>a <span style="color:#000;font-weight:bold">*</span> <span style="color:#000;font-weight:bold">(</span>p<span style="color:#000;font-weight:bold">[</span>1<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">-</span> g<span style="color:#000;font-weight:bold">))</span> <span style="color:#000;font-weight:bold">/</span> alpharadbias<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    p<span style="color:#000;font-weight:bold">[</span>2<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">-=</span> <span style="color:#000;font-weight:bold">(</span>a <span style="color:#000;font-weight:bold">*</span> <span style="color:#000;font-weight:bold">(</span>p<span style="color:#000;font-weight:bold">[</span>2<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">-</span> r<span style="color:#000;font-weight:bold">))</span> <span style="color:#000;font-weight:bold">/</span> alpharadbias<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">catch</span> <span style="color:#000;font-weight:bold">(</span>Exception e<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">}</span> <span style="color:#998;font-style:italic">// prevents 1.3 miscompilation    
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic"></span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>k <span style="color:#000;font-weight:bold">&gt;</span> lo<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                p <span style="color:#000;font-weight:bold">=</span> network<span style="color:#000;font-weight:bold">[</span>k<span style="color:#000;font-weight:bold">--];</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">try</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                    p<span style="color:#000;font-weight:bold">[</span>0<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">-=</span> <span style="color:#000;font-weight:bold">(</span>a <span style="color:#000;font-weight:bold">*</span> <span style="color:#000;font-weight:bold">(</span>p<span style="color:#000;font-weight:bold">[</span>0<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">-</span> b<span style="color:#000;font-weight:bold">))</span> <span style="color:#000;font-weight:bold">/</span> alpharadbias<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    p<span style="color:#000;font-weight:bold">[</span>1<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">-=</span> <span style="color:#000;font-weight:bold">(</span>a <span style="color:#000;font-weight:bold">*</span> <span style="color:#000;font-weight:bold">(</span>p<span style="color:#000;font-weight:bold">[</span>1<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">-</span> g<span style="color:#000;font-weight:bold">))</span> <span style="color:#000;font-weight:bold">/</span> alpharadbias<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                    p<span style="color:#000;font-weight:bold">[</span>2<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">-=</span> <span style="color:#000;font-weight:bold">(</span>a <span style="color:#000;font-weight:bold">*</span> <span style="color:#000;font-weight:bold">(</span>p<span style="color:#000;font-weight:bold">[</span>2<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">-</span> r<span style="color:#000;font-weight:bold">))</span> <span style="color:#000;font-weight:bold">/</span> alpharadbias<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">catch</span> <span style="color:#000;font-weight:bold">(</span>Exception e<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/*  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Move neuron i towards biased (b,g,r) by factor alpha  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * ----------------------------------------------------  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">void</span> <span style="color:#900;font-weight:bold">altersingle</span><span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> alpha<span style="color:#000;font-weight:bold">,</span> <span style="color:#458;font-weight:bold">int</span> i<span style="color:#000;font-weight:bold">,</span> <span style="color:#458;font-weight:bold">int</span> b<span style="color:#000;font-weight:bold">,</span> <span style="color:#458;font-weight:bold">int</span> g<span style="color:#000;font-weight:bold">,</span> <span style="color:#458;font-weight:bold">int</span> r<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">/* alter hit neuron */</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[]</span> n <span style="color:#000;font-weight:bold">=</span> network<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>        n<span style="color:#000;font-weight:bold">[</span>0<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">-=</span> <span style="color:#000;font-weight:bold">(</span>alpha <span style="color:#000;font-weight:bold">*</span> <span style="color:#000;font-weight:bold">(</span>n<span style="color:#000;font-weight:bold">[</span>0<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">-</span> b<span style="color:#000;font-weight:bold">))</span> <span style="color:#000;font-weight:bold">/</span> initalpha<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        n<span style="color:#000;font-weight:bold">[</span>1<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">-=</span> <span style="color:#000;font-weight:bold">(</span>alpha <span style="color:#000;font-weight:bold">*</span> <span style="color:#000;font-weight:bold">(</span>n<span style="color:#000;font-weight:bold">[</span>1<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">-</span> g<span style="color:#000;font-weight:bold">))</span> <span style="color:#000;font-weight:bold">/</span> initalpha<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        n<span style="color:#000;font-weight:bold">[</span>2<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">-=</span> <span style="color:#000;font-weight:bold">(</span>alpha <span style="color:#000;font-weight:bold">*</span> <span style="color:#000;font-weight:bold">(</span>n<span style="color:#000;font-weight:bold">[</span>2<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">-</span> r<span style="color:#000;font-weight:bold">))</span> <span style="color:#000;font-weight:bold">/</span> initalpha<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#998;font-style:italic">/*  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * Search for biased BGR values  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     * ----------------------------  
</span></span></span><span style="display:flex;"><span><span style="color:#998;font-style:italic">     */</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">protected</span> <span style="color:#458;font-weight:bold">int</span> <span style="color:#900;font-weight:bold">contest</span><span style="color:#000;font-weight:bold">(</span><span style="color:#458;font-weight:bold">int</span> b<span style="color:#000;font-weight:bold">,</span> <span style="color:#458;font-weight:bold">int</span> g<span style="color:#000;font-weight:bold">,</span> <span style="color:#458;font-weight:bold">int</span> r<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">/* finds closest neuron (min dist) and updates freq */</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">/* finds best neuron (min dist-bias) and returns position */</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">/* for frequently chosen neurons, freq[i] is high and bias[i] is negative */</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#998;font-style:italic">/* bias[i] = gamma*((1/netsize)-freq[i]) */</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> i<span style="color:#000;font-weight:bold">,</span> dist<span style="color:#000;font-weight:bold">,</span> a<span style="color:#000;font-weight:bold">,</span> biasdist<span style="color:#000;font-weight:bold">,</span> betafreq<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span> bestpos<span style="color:#000;font-weight:bold">,</span> bestbiaspos<span style="color:#000;font-weight:bold">,</span> bestd<span style="color:#000;font-weight:bold">,</span> bestbiasd<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">[]</span> n<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        bestd <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">~(((</span><span style="color:#458;font-weight:bold">int</span><span style="color:#000;font-weight:bold">)</span> 1<span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">&lt;&lt;</span> 31<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        bestbiasd <span style="color:#000;font-weight:bold">=</span> bestd<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        bestpos <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">-</span>1<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        bestbiaspos <span style="color:#000;font-weight:bold">=</span> bestpos<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">for</span> <span style="color:#000;font-weight:bold">(</span>i <span style="color:#000;font-weight:bold">=</span> 0<span style="color:#000;font-weight:bold">;</span> i <span style="color:#000;font-weight:bold">&lt;</span> netsize<span style="color:#000;font-weight:bold">;</span> i<span style="color:#000;font-weight:bold">++)</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>            n <span style="color:#000;font-weight:bold">=</span> network<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">];</span>    
</span></span><span style="display:flex;"><span>            dist <span style="color:#000;font-weight:bold">=</span> n<span style="color:#000;font-weight:bold">[</span>0<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">-</span> b<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>dist <span style="color:#000;font-weight:bold">&lt;</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                dist <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">-</span>dist<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            a <span style="color:#000;font-weight:bold">=</span> n<span style="color:#000;font-weight:bold">[</span>1<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">-</span> g<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>a <span style="color:#000;font-weight:bold">&lt;</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                a <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">-</span>a<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            dist <span style="color:#000;font-weight:bold">+=</span> a<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            a <span style="color:#000;font-weight:bold">=</span> n<span style="color:#000;font-weight:bold">[</span>2<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">-</span> r<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>a <span style="color:#000;font-weight:bold">&lt;</span> 0<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>                a <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">-</span>a<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            dist <span style="color:#000;font-weight:bold">+=</span> a<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>dist <span style="color:#000;font-weight:bold">&lt;</span> bestd<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                bestd <span style="color:#000;font-weight:bold">=</span> dist<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                bestpos <span style="color:#000;font-weight:bold">=</span> i<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            biasdist <span style="color:#000;font-weight:bold">=</span> dist <span style="color:#000;font-weight:bold">-</span> <span style="color:#000;font-weight:bold">((</span>bias<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">])</span> <span style="color:#000;font-weight:bold">&gt;&gt;</span> <span style="color:#000;font-weight:bold">(</span>intbiasshift <span style="color:#000;font-weight:bold">-</span> netbiasshift<span style="color:#000;font-weight:bold">));</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">if</span> <span style="color:#000;font-weight:bold">(</span>biasdist <span style="color:#000;font-weight:bold">&lt;</span> bestbiasd<span style="color:#000;font-weight:bold">)</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">{</span>    
</span></span><span style="display:flex;"><span>                bestbiasd <span style="color:#000;font-weight:bold">=</span> biasdist<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>                bestbiaspos <span style="color:#000;font-weight:bold">=</span> i<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>            betafreq <span style="color:#000;font-weight:bold">=</span> <span style="color:#000;font-weight:bold">(</span>freq<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">&gt;&gt;</span> betashift<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>            freq<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">-=</span> betafreq<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>            bias<span style="color:#000;font-weight:bold">[</span>i<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">+=</span> <span style="color:#000;font-weight:bold">(</span>betafreq <span style="color:#000;font-weight:bold">&lt;&lt;</span> gammashift<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span>        freq<span style="color:#000;font-weight:bold">[</span>bestpos<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">+=</span> beta<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        bias<span style="color:#000;font-weight:bold">[</span>bestpos<span style="color:#000;font-weight:bold">]</span> <span style="color:#000;font-weight:bold">-=</span> betagamma<span style="color:#000;font-weight:bold">;</span>    
</span></span><span style="display:flex;"><span>        <span style="color:#000;font-weight:bold">return</span> <span style="color:#000;font-weight:bold">(</span>bestbiaspos<span style="color:#000;font-weight:bold">);</span>    
</span></span><span style="display:flex;"><span>    <span style="color:#000;font-weight:bold">}</span>    
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span>  
</span></span></code></pre></td></tr></table>
</div>
</div>
        </div>

        
<div class="post-archive">
    <ul class="post-copyright">
        <li><strong>原文作者：</strong><a rel="author" href="https://anttu.gitee.io/">Anttu</a></li>
        <li style="word-break:break-all"><strong>原文链接：</strong><a href="https://anttu.gitee.io/post/2017-03-09-java_captach/">https://anttu.gitee.io/post/2017-03-09-java_captach/</a></li>
        <li><strong>版权声明：</strong>本作品采用<a rel="license" href="https://creativecommons.org/licenses/by-nc-nd/4.0/">知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议</a>进行许可，非商业转载请注明出处（作者，原文链接），商业转载请联系作者获得授权。</li>
    </ul>
</div>
<br/>



        

<div class="post-archive">
    <h2>See Also</h2>
    <ul class="listing">
        
        <li><a href="/archives/">归档</a></li>
        
        <li><a href="/search/">搜索</a></li>
        
    </ul>
</div>


        <div class="post-meta meta-tags">
            
            <ul class="clearfix">
                
                <li><a href='/tags/java' target="_blank">java</a></li>
                
                <li><a href='/tags/captcha' target="_blank">captcha</a></li>
                
            </ul>
            
        </div>
    </article>
    
    

    
    
    <div class="post bg-white">
      <script src="https://utteranc.es/client.js"
            repo= "anTtutu/anTtutu.github.io"
            issue-term="pathname"
            theme="github-light"
            crossorigin="anonymous"
            async>
      </script>
    </div>
    
    
    
</div>

                    <footer id="footer">
    <div>
        &copy; 2025 <a href="https://anttu.gitee.io/">Anttu&#39;s Blog By Anttu</a>
        
    </div>
    <br />
    <div>
        <div class="github-badge">
            <a href="https://gohugo.io/" target="_black" rel="nofollow"><span class="badge-subject">Powered by</span><span class="badge-value bg-blue">Hugo</span></a>
        </div>
        
        <div class="github-badge">
            <a href="https://github.com/flysnow-org/maupassant-hugo" target="_black"><span class="badge-subject">Theme</span><span class="badge-value bg-yellowgreen">Maupassant</span></a>
        </div>
    </div>
</footer>


    
    
    <script type="text/javascript">
        window.MathJax = {
            tex2jax: {
                inlineMath: [['$', '$']],
                processEscapes: true
                }
            };
    </script>
    <script src='//cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML' async></script>

<a id="rocket" href="#top"></a>
<script type="text/javascript" src='/js/totop.js?v=0.0.0' async=""></script>
<style type="text/css">
div.highlight {
    position: relative;
    margin: 1em 0px;
}

.copy-code {
    display: none;
    position: absolute;
    top: 4px;
    right: 4px;
    color: rgba(255, 255, 255, 0.8);
    background: rgba(78, 78, 78, 0.8);
    border-radius: var(--radius);
    padding: 0 5px;
    font: inherit;
    user-select: none;
    cursor: pointer;
    border: 0;
    --radius: 8px;
}

div.highlight:hover .copy-code,pre:hover .copy-code {
    display: block;
}

</style>
<script>
    document.querySelectorAll('pre > code').forEach((codeblock) => {
        const container = codeblock.parentNode.parentNode;

        const copybutton = document.createElement('button');
        copybutton.classList.add('copy-code');
        copybutton.innerHTML = 'copy';

        function copyingDone() {
            copybutton.innerHTML = 'copied!';
            setTimeout(() => {
                copybutton.innerHTML = 'copy';
            }, 2000);
        }

        copybutton.addEventListener('click', (cb) => {
            if ('clipboard' in navigator) {
                navigator.clipboard.writeText(codeblock.textContent);
                copyingDone();
                return;
            }

            const range = document.createRange();
            range.selectNodeContents(codeblock);
            const selection = window.getSelection();
            selection.removeAllRanges();
            selection.addRange(range);
            try {
                document.execCommand('copy');
                copyingDone();
            } catch (e) { };
            selection.removeRange(range);
        });

        if (container.classList.contains("highlight")) {
            container.appendChild(copybutton);
        } else if (container.parentNode.firstChild == container) {
            
        } else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
            
            codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
        } else {
            
            codeblock.parentNode.appendChild(copybutton);
        }
    });
</script>


    <script type="text/javascript" src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js" async></script>




    <script src='/js/asciinema-player.js'></script>

                </div>

                <div id="secondary">
    <section class="widget">
        <form id="search" action='https://anttu.gitee.io/search' method="get" accept-charset="utf-8" target="_blank" _lpchecked="1">
      
      <input type="text" name="q" maxlength="20" placeholder="Search">
      <input type="hidden" name="sitesearch" value="https://anttu.gitee.io/">
      <button type="submit" class="submit icon-search"></button>
</form>
    </section>
    
    <section class="widget">
        <h3 class="widget-title">最近文章</h3>
<ul class="widget-list">
    
    <li>
        <a href="https://anttu.gitee.io/post/2025-02-13-mvnd/" title="mvnd结合idea使用" target="_blank">mvnd结合idea使用</a>
    </li>
    
    <li>
        <a href="https://anttu.gitee.io/post/2024-04-15-postgresql/" title="postgresql数据库常用记录" target="_blank">postgresql数据库常用记录</a>
    </li>
    
    <li>
        <a href="https://anttu.gitee.io/post/2023-06-16-miner_virus_5/" title="挖矿病毒5-私有云机房挖矿病毒定位" target="_blank">挖矿病毒5-私有云机房挖矿病毒定位</a>
    </li>
    
    <li>
        <a href="https://anttu.gitee.io/post/2022-12-26-covid-19/" title="羊了" target="_blank">羊了</a>
    </li>
    
    <li>
        <a href="https://anttu.gitee.io/post/2022-12-19-git_delete_history/" title="git删除历史提交记录" target="_blank">git删除历史提交记录</a>
    </li>
    
    <li>
        <a href="https://anttu.gitee.io/post/2022-11-28-python_muilt_version/" title="python多版本管理工具" target="_blank">python多版本管理工具</a>
    </li>
    
    <li>
        <a href="https://anttu.gitee.io/post/2022-11-22-springboot_start_failed/" title="springboot常见兼容性错误" target="_blank">springboot常见兼容性错误</a>
    </li>
    
    <li>
        <a href="https://anttu.gitee.io/post/2022-11-14-docker_port/" title="docker修改运行的容器端口" target="_blank">docker修改运行的容器端口</a>
    </li>
    
    <li>
        <a href="https://anttu.gitee.io/post/2022-11-10-go_muilt_version/" title="go多版本管理工具" target="_blank">go多版本管理工具</a>
    </li>
    
    <li>
        <a href="https://anttu.gitee.io/post/2022-10-27-jenkins_reset/" title="jenkins的admin密码忘记了如何重置" target="_blank">jenkins的admin密码忘记了如何重置</a>
    </li>
    
</ul>
    </section>

    

    <section class="widget">
        <h3 class="widget-title"><a href='/categories/'>分类</a></h3>
<ul class="widget-list">
    
    <li><a href="https://anttu.gitee.io/categories/about/">about (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/android/">android (2)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/app/">app (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/aria2/">aria2 (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/arm64/">arm64 (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/arthas/">arthas (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/awr/">awr (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/backend_execute/">backend_execute (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/backup/">backup (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/blog/">blog (3)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/bug/">bug (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/build/">build (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/cache/">cache (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/caffeine/">caffeine (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/captcha/">captcha (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/check/">check (5)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/clean/">clean (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/cli/">cli (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/cluster/">cluster (4)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/covid-19/">covid-19 (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/cve/">cve (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/cygwin/">cygwin (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/dataguard/">dataguard (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/db/">db (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/deepfacelab/">deepfacelab (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/devops/">devops (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/docker/">docker (5)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/dockerfile/">dockerfile (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/dos/">dos (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/dump/">dump (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/eclipse/">eclipse (2)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/explain/">explain (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/faker/">faker (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/gcc/">gcc (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/git/">git (2)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/gitment/">gitment (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/gitpages/">gitpages (2)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/go/">go (5)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/h2/">h2 (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/h5/">h5 (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/ha/">ha (4)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/http/">http (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/hugo/">hugo (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/id/">id (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/idea/">idea (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/java/">java (24)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/jekyll/">jekyll (2)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/jenkins/">jenkins (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/jrebel/">jrebel (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/js/">js (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/jsr/">jsr (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/jvm/">jvm (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/kafka/">kafka (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/kali/">kali (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/kenlm/">kenlm (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/linux/">linux (22)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/log/">log (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/log4j/">log4j (2)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/lombok/">lombok (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/mac/">mac (5)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/matplotlib/">matplotlib (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/maven/">maven (3)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/mine/">mine (5)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/mongodb/">mongodb (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/mvnd/">mvnd (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/mysql/">mysql (5)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/nginx/">nginx (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/nmap/">nmap (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/oom/">oom (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/oracle/">oracle (3)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/orangePi/">orangePi (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/package/">package (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/pandas/">pandas (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/pg/">pg (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/port/">port (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/postgresql/">postgresql (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/python/">python (8)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/rec/">rec (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/redis/">redis (3)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/regexp/">regexp (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/safe/">safe (5)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/sdk/">sdk (3)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/shell/">shell (3)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/split/">split (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/springboot/">springboot (4)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/springcloud/">springcloud (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/sqlmap/">sqlmap (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/ssd/">ssd (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/tcp/">tcp (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/termux/">termux (2)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/test/">test (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/testing/">testing (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/union_id/">union_id (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/vcs/">vcs (7)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/virus/">virus (5)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/vxvm/">vxvm (3)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/win10/">win10 (6)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/xrebel/">xrebel (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/ynote/">ynote (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/zk/">zk (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/zookeeper/">zookeeper (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/%E5%89%8D%E7%AB%AF/">前端 (1)</a></li>
    
    <li><a href="https://anttu.gitee.io/categories/%E5%AE%B9%E7%81%BE/">容灾 (1)</a></li>
    
</ul>
    </section>

    <section class="widget">
        <h3 class="widget-title"><a href='/tags/'>标签</a></h3>
<div class="tagcloud">
    
    <a href="https://anttu.gitee.io/tags/about/">about</a>
    
    <a href="https://anttu.gitee.io/tags/android/">android</a>
    
    <a href="https://anttu.gitee.io/tags/app/">app</a>
    
    <a href="https://anttu.gitee.io/tags/aria2/">aria2</a>
    
    <a href="https://anttu.gitee.io/tags/arm64/">arm64</a>
    
    <a href="https://anttu.gitee.io/tags/awr/">awr</a>
    
    <a href="https://anttu.gitee.io/tags/backup/">backup</a>
    
    <a href="https://anttu.gitee.io/tags/blog/">blog</a>
    
    <a href="https://anttu.gitee.io/tags/bug/">bug</a>
    
    <a href="https://anttu.gitee.io/tags/build/">build</a>
    
    <a href="https://anttu.gitee.io/tags/captcha/">captcha</a>
    
    <a href="https://anttu.gitee.io/tags/check/">check</a>
    
    <a href="https://anttu.gitee.io/tags/cluster/">cluster</a>
    
    <a href="https://anttu.gitee.io/tags/cygwin/">cygwin</a>
    
    <a href="https://anttu.gitee.io/tags/dataguard/">dataguard</a>
    
    <a href="https://anttu.gitee.io/tags/deepfacelab/">deepfacelab</a>
    
    <a href="https://anttu.gitee.io/tags/dos/">dos</a>
    
    <a href="https://anttu.gitee.io/tags/eclipse/">eclipse</a>
    
    <a href="https://anttu.gitee.io/tags/explain/">explain</a>
    
    <a href="https://anttu.gitee.io/tags/gcc/">gcc</a>
    
    <a href="https://anttu.gitee.io/tags/gitment/">gitment</a>
    
    <a href="https://anttu.gitee.io/tags/gitpages/">gitpages</a>
    
    <a href="https://anttu.gitee.io/tags/go/">go</a>
    
    <a href="https://anttu.gitee.io/tags/h2/">h2</a>
    
    <a href="https://anttu.gitee.io/tags/h5/">h5</a>
    
    <a href="https://anttu.gitee.io/tags/ha/">ha</a>
    
    <a href="https://anttu.gitee.io/tags/http/">http</a>
    
    <a href="https://anttu.gitee.io/tags/hugo/">hugo</a>
    
    <a href="https://anttu.gitee.io/tags/java/">java</a>
    
    <a href="https://anttu.gitee.io/tags/jekyll/">jekyll</a>
    
    <a href="https://anttu.gitee.io/tags/jrebel/">jrebel</a>
    
    <a href="https://anttu.gitee.io/tags/js/">js</a>
    
    <a href="https://anttu.gitee.io/tags/jsr/">jsr</a>
    
    <a href="https://anttu.gitee.io/tags/kafka/">kafka</a>
    
    <a href="https://anttu.gitee.io/tags/kali/">kali</a>
    
    <a href="https://anttu.gitee.io/tags/kenlm/">kenlm</a>
    
    <a href="https://anttu.gitee.io/tags/linux/">linux</a>
    
    <a href="https://anttu.gitee.io/tags/log4j/">log4j</a>
    
    <a href="https://anttu.gitee.io/tags/mac/">mac</a>
    
    <a href="https://anttu.gitee.io/tags/mine/">mine</a>
    
    <a href="https://anttu.gitee.io/tags/mongodb/">mongodb</a>
    
    <a href="https://anttu.gitee.io/tags/mysql/">mysql</a>
    
    <a href="https://anttu.gitee.io/tags/nginx/">nginx</a>
    
    <a href="https://anttu.gitee.io/tags/oom/">oom</a>
    
    <a href="https://anttu.gitee.io/tags/oracle/">oracle</a>
    
    <a href="https://anttu.gitee.io/tags/orangePi/">orangePi</a>
    
    <a href="https://anttu.gitee.io/tags/python/">python</a>
    
    <a href="https://anttu.gitee.io/tags/rec/">rec</a>
    
    <a href="https://anttu.gitee.io/tags/redis/">redis</a>
    
    <a href="https://anttu.gitee.io/tags/safe/">safe</a>
    
    <a href="https://anttu.gitee.io/tags/shell/">shell</a>
    
    <a href="https://anttu.gitee.io/tags/springboot/">springboot</a>
    
    <a href="https://anttu.gitee.io/tags/sqlmap/">sqlmap</a>
    
    <a href="https://anttu.gitee.io/tags/ssd/">ssd</a>
    
    <a href="https://anttu.gitee.io/tags/tcp/">tcp</a>
    
    <a href="https://anttu.gitee.io/tags/termux/">termux</a>
    
    <a href="https://anttu.gitee.io/tags/union_id/">union_id</a>
    
    <a href="https://anttu.gitee.io/tags/vcs/">vcs</a>
    
    <a href="https://anttu.gitee.io/tags/virus/">virus</a>
    
    <a href="https://anttu.gitee.io/tags/vxvm/">vxvm</a>
    
    <a href="https://anttu.gitee.io/tags/win10/">win10</a>
    
    <a href="https://anttu.gitee.io/tags/xrebel/">xrebel</a>
    
    <a href="https://anttu.gitee.io/tags/ynote/">ynote</a>
    
    <a href="https://anttu.gitee.io/tags/zk/">zk</a>
    
    <a href="https://anttu.gitee.io/tags/zookeeper/">zookeeper</a>
    
    <a href="https://anttu.gitee.io/tags/%E5%AE%B9%E7%81%BE/">容灾</a>
    
</div>
    </section>

    

    <section class="widget">
        <h3 class="widget-title">其它</h3>
        <ul class="widget-list">
            <li><a href="https://anttu.gitee.io/index.xml">文章 RSS</a></li>
        </ul>
    </section>
</div>
            </div>
        </div>
    </div>
</body>

</html>